Reset
Reset 适用于还没有 Push 的回滚。
reset 指令:
¡ 将 HEAD 指针指向指定的提交;
¡¡ 根据参数[--soft | mixed | hard | keep ...]进行对 Index (Staging Area)和 Working Directory 的重置。
soft
不对 Index 和 Working Directory 进行重置。
mixed(默认)
只对 Index 进行重置。
hard
对 Index 和 Working Directory 进行重置。
Revert
前提:分支是干净的。
产生冲突:revert 的 commit 和其之后的 commit 有冲突。比如:revert 的 commit 和 其后的一些 commit 修改了同一文件。
Reset 、Revert 差别
Reset 将 HEAD 后移。而 Revert 是用一次新的 commit 来中和掉之前的 commit ,这样保证了 HEAD 一路向前。
小结
1. reset 应该用在你的私有分支上。reset 将 HEAD 后移,当你将该分支合并到其它分支上时,HEAD 后的 commit 可能会出现在合并分支上。而 revert 则不会出现这种情况。
2.当你的代码已经 push 到远端,这时必须用 revert。如果你使用 reset 将本地代码会滚到你想要的版本,这时候你 push 到远端会出很多问题(本地版本落户远端版本,你必须先 pull ,但是这样又恢复到了你不想要的版本)。如果你使用 revert ,只是多了一次新的 commit ,这时候你在 push 到远端,很随意的就覆盖了远端的版本。