分享一个小网页:Learn Git Branching(From pcottle (Peter Cottle) · GitHub)
HEAD
我们首先看一下 “HEAD”。 HEAD 是一个对当前所在分支的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。 HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。
观察如下代码对HEAD的影响
git checkout C1
git checkout main
git commit
git checkout C2
相对引用
这里我介绍两个简单的用法:
- 使用
^
向上移动 1 个提交记录 - 使用
~<num>
向上移动多个提交记录,如~3
git checkout main^
git checkout HEAD~4
使用相对引用最多的就是移动分支。可以直接使用 -f
选项让分支指向另一个提交。
例如:
git branch -f main HEAD~3
上面的命令会将 main 分支强制指向 HEAD 的第 3 级 parent 提交。
撤销变更
主要有两种方法用来撤销变更 —— 一个是 git reset,还有就是 git revert。
git reset通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。
git reset HEAD~1
git reset很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!
为了撤销更改并分享给别人,我们需要使用git revert:
git revert HEAD
奇怪!在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录C2'引入了更改 —— 这些更改刚好是用来撤销C2这个提交的。也就是说C2'的状态与C1是相同的。
revert 之后就可以把你的更改推送到远程仓库与别人分享啦。