Git 基础笔记整理1
Git 官网:http://git-scm.com/
git教程1:http://www.yiibai.com/git/home.html
git教程2 :http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
工具:SourceTree
1,Git版本库 初始化
初始化一个Git仓库,使用git init命令。
2,添加文件到Git仓库
分两步:
第一步,使用命令
git add <file>,注意,可反复多次使用,添加多个文件;第二步,使用命令
git commit -m "说明文字",完成。- 补充:
git add -Astages Allgit add .stages new and modified, without deletedgit add -ustages modified and deleted, without new
3, git 状态查看
要随时掌握工作区的状态,使用
git status命令。 git status -s ,显示精简格式的状态输出。如果
git status告诉你有文件被修改过,用git diff可以查看修改内容- 用
git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
4,git 版本
- 在Git中,用
HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
- 因此,Git允许我们在版本的历史之间穿梭,使用命令
git reset --hard commit_id (回退到某一个版本)。
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
穿梭前,用
git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用
git reflog查看命令历史,以便确定要回到未来的哪个版本。- 精简输出日志: git log --pretty=oneline
5,
1) git checkout -- file可以丢弃工作区的修改 // --很重要,没有--,就变成了“创建一个新分支”的命令
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
2) 删除文件
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
6,要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
7,创建分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
Git鼓励大量使用分支: Git鼓励你使用分支完成某个任务,合并后再删掉分支,因为这样更安全。
查看分支:git branch :git branch命令会列出所有分支,当前分支前面会标一个*号。
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name> // git merge命令用于合并指定分支到当前分支。
删除分支:git branch -d <name>
强行删除:git branch -D <name> //开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
查看服务器端分支情况 :git branch -r
8, 分支冲突
1)Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图
eg:
$ git log --graph --pretty=oneline --abbrev-commit
* 59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...
eg:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward //这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快
readme.txt | 1 +
1 file changed, 1 insertion(+)
2)合并分支
git merge --no-ff -m "merge with no-ff" dev
--no-ff参数,表示禁用Fast forward;加上-m参数,把commit描述写进去;
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
9, 分支管理
git stash //可以把当前工作现场“储藏”起来
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git stash list
第一种方式恢复现场: git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
第二种方式: git stash pop,恢复的同时把stash内容也删了:
恢复指定的stash,用命令: $ git stash apply stash@{0}
10, 多人协作的工作模式通常是这样:
首先,可以试图用
git push origin branch-name推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用
git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
git branch --set-upstream dev origin/dev
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
11,标签
命令
git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;git tag -a <tagname> -m "blablabla..."可以指定标签信息; //-a指定标签名,-m指定说明文字git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;命令
git tag可以查看所有标签。- git show <tagname> 查看标签信息
标签不是按时间顺序列出,而是按字母排序的
命令
git push origin <tagname>可以推送一个本地标签;命令
git push origin --tags可以推送全部未推送过的本地标签;命令
git tag -d <tagname>可以删除一个本地标签;命令
git push origin :refs/tags/<tagname>可以删除一个远程标签。- 删除远程标签,先本地删除,再远程删除
12,自定义Git
1) git config --global color.ui true //让Git显示颜色,会让命令输出看起来更醒目
2) 忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。
所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
13, git remote
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
不带选项的时候,git remote命令列出所有远程主机。
$ git remote
origin
使用-v选项,可以参看远程主机的网址。
$ git remote -v
origin git@github.com:jquery/jquery.git (fetch)
origin git@github.com:jquery/jquery.git (push)
上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery
上面命令表示,克隆的时候,指定远程主机叫做jQuery。
git remote show命令加上主机名,可以查看该主机的详细信息。
$ git remote show <主机名>
git remote add命令用于添加远程主机。
$ git remote add <主机名> <网址>
git remote rm命令用于删除远程主机。
$ git remote rm <主机名>
git remote rename命令用于远程主机的改名。
$ git remote rename <原主机名> <新主机名>
Git 基础笔记整理1的更多相关文章
- Git学习笔记整理【图像解析、基础命令、分支、远程仓库】
Git别名设置:https://www.cnblogs.com/hero123/p/9105381.html Git远程项目公钥配置:https://www.cnblogs.com/hero123/p ...
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- HTML基础笔记整理
「学习笔记」HTML基础 前言 勤做笔记不仅可以让自己学的扎实,更重要的是可以让自己少走弯路.有人说:"再次翻开笔记是什么感觉",我的回答是:"初恋般的感觉". ...
- web基础笔记整理(一)
一.程序的分层 1.界面层: 某种类型的应用程序 a.DOS(控制台运行) b.桌面应用程序--独立安装,独立运行 c.web类型--现在流行的 单机版:电脑上要安装,程序升级之后,电脑上也要升级-- ...
- git常用笔记整理
Git 什么是Git 初始化 guthub创建sshKey 下载 上传 更新 创建切换分支 删除分支 合并分支 查看命令历史|提交历史 撤回 设置用户名和密码 查看配置信息 强制pull 强制push ...
- Git基础--笔记
0.取的项目的git仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来 1.在工作目录 ...
- git基础命令整理
首先安装git,然后选择一个文件夹做初始化!! yum -y install git ### 安装 git init ...
- java概念基础笔记整理
1.构造方法没有类型,有类型的不是不叫构造方法. 2.一个类的的成员变量可以是java允许的任何数据类型,一个类可以把某个对象作为自己的一个成员变量,如果用这样的类创建对象,那么该对象中就会其他对象, ...
- 从0开始学Swift笔记整理(五)
这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...
随机推荐
- 疯狂java讲义 第三版 笔记
java7新加特性: 0B010101 二进制数 int c=0B0111_1111; 数值中使用下划线分隔 switch 支持String类型 字符串常量放在常量池 String s0 ...
- 坐标转换convertRect
// 目标view的直接父viwe 目标view 要转换到的view [self.backgr ...
- Set-cookie无效(失效)
今天做爬虫的时候遇到网站响应response返回的数据中有Set-Cookie,但是使用Linux的curl请求网页保存cookie始终为空,换句话说也就是Set-Cookie设置无效,所以我一直Go ...
- sublime eslint 和 jshint的安装与使用
jshint简介 jslint是一javascript的语法检测,众多前端自动化工具都又用到,编辑器也用到jshint. webstorm很强大,自身带有,但是我使用的电脑带不动.sublime或者a ...
- 【JMeter】1.9上考试jmeter测试调试
1.打开抓包工具开始抓包,抓取录制脚本的整个过程.以方便后续确认关联参数的左右关联,搜索相关代码. 1.用badboy录制测试脚本并存为jmeter格式. 2.用jmeter打开已经保存的脚本 1.用 ...
- (1.1)mysql 选择合适的数据类型
(1.1)mysql 选择合适的数据类型 1.char与varchar [1.1]char 在内容未满定义长度时,做空格填充,且字符串末尾空格会被截断:超出定义长度也会被截断. 如:char(4) ...
- mysql 权限管理 对所有库 所有表 授权 *.*
对miek这个账号localhost 授予了所有库,所表的select权限 mysql> grant select on *.* to 'mike'@'localhost'; Query OK, ...
- myeclipse连接并运行sql文件
1:在工程目录上右键>new >SQL File ,写入sql 2:在sql文件上面右键>execute sql files 3:选择数据库类型,并点击create创建一个连接: ...
- Y2K Accounting Bug(poj2586)
题意: 有一个公司由于某个病毒使公司赢亏数据丢失,但该公司每月的 赢亏是一个定数,要么一个月赢利s,要么一月亏d.现在ACM只知道该公司每五个月有一个赢亏报表,而且每次报表赢利情况都为亏.在一年中这样 ...
- Canvas标签基础
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...