之前要知道的
-
版本库模型
① 替换引用的指向。引用指向新的提交ID。
② 替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。
③ 替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。
git revert 和 git reset的区别
- git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
- git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
所以根据具体情况具体使用。
git reset --hard和 --soft的区别
git reset --hard
使用参数 git reset --hard,如 git reset --hard <commit>
会执行上图中的全部动作,更改工作区到为止。
回过头看上面的三个步骤,就很清楚。
git reset --soft
使用参数--soft,如 git reset --soft <commit>
会执行上图中的操作①。即只更改引用的指向,不改变暂存区和工作区。