基础篇
提交
git commit #提交命令
创建分支
git branch <name> #创建分支命令,其中<name>代表创建的新分支名
- 注意:在没有
<name>
参数时,git branch
命令将列出本地所有分支
切换分支
git checkout <name> #切换分支命令,其中<name>表示切换到的分支名
创建并切换分支
git checkout -b <name> #创建并切换分支命令,其中<name>表示创建并切换到的新分支名
该命令可以看成是由创建分支命令与切换分支命令的整合。
分支与合并
方法一:
git merge <name> #将<name>分支合并到当前所在分支
在使用git merge
命令进行分支合并时,需要先切换到目标分支,再使用该命令进行合并。
示例:
假如已经存在主分支为master
,现在需要新建一个分支名为new1
并将该分支合并到主分支master
中。(当前处于其它分支中)
git branch new1 #新建分支new1
git checkout master #切换到目标分支,此处为主分支master
git merge new1 #将new1分支合并到主分支master(当前分支)
方法二:
git rebase <name> #将当前所在分支合并到分支<name>中
rebase
实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去;rebase
的优势就是可以创造更线性的提交历史。
与merge
合并方法的区别:- 执行合并命令时所在当前分支不同,
merge
是将被合并的分支合并到当前分支(目标分支);而rebase
是将当前分支(被合并分支)合并到目标分支。 merge
合并命令是合并两个分支并生成一个新的commit
,不会删除原有的commit
;rebase
合并命令是将被合并的分支合并到目标分支上,生成一个新的commit
,并且会删除原分支上已提取的commit
。这也是rebase
可以创造更线性的提交历史的优势所在。
高级篇
HEAD
- 简单来讲可以把HEAD理解为一个指针,它指向一个你正在工作的本地分支;也可以理解为当前指向分支的副本。如
HEAD -> master
表示当前正在工作的分支为master
。
相对引用 ^
- 通过哈希值指定提交记录很不方便,因此git引入了相对引用。相对引用可以让我们从一个便于记忆的
commit
或分支开始计算。
1.使用^
向上移动一个记录
git checkout master^ #切换到master的父节点
- 也可以将
HEAD
作为相对引用的参照 git checkout HEAD^
表示切换到当前HEAD
指向的分支的父节点。
2.使用~<num>
可以向上移动num个记录
强制移动分支位置
- 使用
-f
选项让分支指向另一个提交。
git branch -f master HEAD~3 #将分支master强制指向HEAD的第2级父提交
撤销变更
git reset
通过把分支记录回退几个提交记录来实现撤销改动。(只适合在本地分支中使用)
git reset HEAD~1 #将当前所在分支移回到该分支的上一次提交记录
- 由于
git reset
只适用于本地分支提交记录的改动,对于远程分支,我们需要使用git revert
。
git revert HEAD
结果中C2'
和C1
完全相同。