基础篇
1.git commit
git 提交记录,执行git commit git会产生一个新的节点并将HEAD移动到最新节点.
git commit
2.git branch
git 分支是非常轻量级的 并不会对存储造成开销
git branch newImage
在执行git commit 可以看到master 分支前进了(*号表示当前所在分支)
git commit
若执行切换分支再执行commit 会发现newImage 分支会前进
git checkout newImage;
git commit
3.git merge
将两个分支合并 git merge 会产生一条特殊的提交记录,它有两个父节点
把bugFix 合并到master 节点
git merge bugFix
在上步骤基础上再把master 合并到 bugFix
git checkout bugFix;
git merge master
4.git rebase
git rebase 代码合并的另一种方式,原理是复制某些提交记录再提交到某分支上
现在我们把bugFix 分支合并到master 上
git rebase master
然后切回master 把 master 分支合并到 bugFix 分支上
git checkout master;
git rebase bugFix
高级篇
1.HEAD 分离
HEAD 总是指向当前分支上最近一次提交记录
git checkout c1; git checkout master; git commit; git checkout c2
分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。
2.相对引用
通过指定hash 值的方式移动不太方便,通过相对引用移动就会方便很多(上诉的c1、c2 就是模拟的hash 值。具体hash值可通过git log 查看)
- 使用
^
向上移动 1 个提交记录 - 使用
~<num>
向上移动多个提交记录,如~3
git checkout master^
git checkout HEAD~4
可以使用 -f 参数指向另一提交来移动分支
git branch -f master HEAD~3
上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。
3.撤销变更
git reset 和 git revert
git reset HEAD~1
注:在reset后, C2
所做的变更还在,但是处于未加入暂存区状态。
虽然在你的本地分支中使用 git reset
很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!
为了撤销更改并分享给别人,我们需要使用 git revert
。
git revert HEAD
在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 C2'
引入了更改 —— 这些更改刚好是用来撤销 C2
这个提交的。也就是说 C2'
的状态与 C1
是相同的。
revert 之后就可以把你的更改推送到远程仓库与别人分享啦