Git Undo Merge Conflict Resolve

Git

有时候,会遇到这样的情况:在处理 Git Merge Conflict 的时候,因为一些误判,导致选择了错误的修改方式。如果选择是在文本编辑器中完成的,那么可以通过撤销改动的方式回退到最原始的版本,重新选择;而如果文本编辑器的历史记录丢失或者改动是通过其他方式完成的,想要恢复到最开始的状态,就需要借助 Git 的 checkout -m 功能。

通过 git checkout -m 命令,可以将一个或多个指定的文件,回退到最开始的冲突状态。比如:

git checkout -m package.json

这个命令可以将 package.json 文件回退到最开始的冲突状态;而:

git checkout -m .

则可以将目录下所有的文件都回退到最开始的冲突状态(如果没有冲突的话保持不变)。

需要注意的几点:

  1. git checkout -m 在不同的情况下代表的含义是不同的。在解决冲突的时候表示重新创建冲突;在切分支的时候则等价于 --merge,表示使用 3-way merge 去合并两个分支都做了改动的文件(参考官方文档中的解释);
  2. 如果在处理冲突的时候做了其他的改动,在回退的时候不会保留这些改动:可以简单的认为,-m 做的事情就是将冲突文件还原到最初的状态。