强力推荐:
git比较容易理解的入门讲解:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
从原理角度剖析git命令:https://coding.net/help/doc/practice/git-principle.html
git fetch, merge, pull, push需要注意的地方:http://www.cnblogs.com/hutaoer/archive/2013/03/14/3078869.html
Revert
如果我们想要用一个反向提交恢复项目的某个版本,那就需要 revert 来协助我们完成了。什么是反向提交呢,就是旧版本添加了的内容,要在新版本中删除,旧版本中删除了的内容,要在新版本中添加。这在分支已经推送到远程仓库的情境下非常有用。
Revert 之前:
revert 也不会修改历史提交记录,实际的操作相当于是检出目标提交的项目快照到工作区与暂存区,然后用一个新的提交完成版本的“回退”。
Revert 之后:
Reset
reset 操作与 revert 很像,用来在当前分支进行版本的“回退”,不同的是,reset 是会修改历史提交记录的。
reset 常用的选项有三个,分别是 —soft, —mixed, —hard。他们的作用域依次增大。
我们分别来看。
soft 会仅仅修改分支指向。而不修改工作区与暂存区的内容,我们可以接着做一次提交,形成一个新的 commit。这在我们撤销临时提交的场景下显得比较有用。
使用 reset –soft 前:
使用 reset –soft 后:
mixed 比 soft 的作用域多了一个 暂存区。实际上 mixed 选项与 soft 只差了一个 add 操作。
使用 reset –mixed 前:
使用 reset –mixed 后:
hard 会作用域又比 mixed 多了一个 工作区。
使用 reset –hard 前:
使用 reset –hard 后:
hard 选项会导致工作区内容“丢失”。
在使用 hard 选项时,一定要确保知道自己在做什么,不要在迷糊的时候使用这条选项。如果真的误操作了,也不要慌,因为只要 git 一般不会主动删除本地仓库中的内容,根据你丢失的情况,可以进行找回,比如在丢失后可以使用 git reset –hard ORIG_HEAD 立即恢复,或者使用 reflog 命令查看之前分支的引用。