引言
我们在开发的过程中,可能由于某些原因需要我们进行代码的回归到某个指定的版本,那么我们应该怎样操作才是正确的呢?下面先看看容易犯错的操作流程:
1.本地git reset --hard commit id回退到某个版本
2.回退版本后,未push到远程就修改了本地代码
3.修改完后再push到远程,提示先pull
4.问题是pull远程代码就覆盖掉本地修改的了
操作分析:
一开始是这样:
A - B - C - D 远程
A - B - C - D 本地
第一步,git reset --hard B
A - B - C - D 远程
A - B 本地
第二步,修改本地代码,记为 E
A - B - C - D 远程
A - B - E 本地
如果我们现在pull 远程代码,情况如下:
A - B - C - D 远程
A - B - E - D' 本地
其中,D' 包含了 C 和 D 的改动,因为 git pull 相当于 git fetch 加上 git merge。这个时候 merge 的是 "Fetched HEAD",也就是远程的 D。同时,D' 的 message 应该会出现一句 "merge … from ...."
如果你希望远程是 A - B - E,那就不要 pull,git push --force强制推送。