git-cherry-pick 命令,救我一命

34 阅读1分钟

假设我需要把 B 分支代码合并进入 A 在合并代码的时候,遇到冲突了,解决冲突过程中 我想撤回重新合并分支。于是我就是,点了这个 还原了所有更改,想着反正代码还在,脑子没有多想,再合一次就能再一次解决冲突了。

image.png

事实并非这样,当我再一次合并的时候,没有任何代码文件被合并进来。仔细想想也是啊,这样是不会被合并进来的。因为从拓扑上看它们已经合并过,再次进行合并的时候,Git 的历史记录显示:

  • A 分支的提交链上出现了一个“合并 B”的节点,
  • 所以 Git 认为 B 的更改已经被整合到 A,即使你在解决冲突时丢弃了 A 的代码。

git会认为你无需再次进行合并。

而后我和同事想过的解决办法,1.回退A分支的节点(行不通)太多人往A分支提交了东西了 2.修改 B 分支的文件重新提交一遍(不行,git 比较文件不是整个文件进行比较)

最后 使用 git cherry-pick 对某个单次提交进行合并