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

一次 git 上的操作失误,让我在学会 git cherry-pick 命令

引言

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

事故的原因

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

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

解决问题

而后我和同事想过的解决办法

  1. 回退A分支的节点(行不通)太多人往 A 分支提交了东西了
  2. 修改 B 分支的文件重新提交一遍(不行,git 比较文件不是整个文件进行比较)

最后 我想到 git cherry-pick 可以对某个单次提交进行合并,只需要回到分支 B 上看 git 提交历史,将该分支的提交记录 id 从 最开始开始的 提交 id 开始往 A 分支 合并。这样就不会漏掉代码,且可以达到合并的效果。

总结

  1. git cherry-pick xxx 可以根据 提交 id 进行合并代码。
  2. git 在合并时出现了冲突,放弃文件变更,在 git 看来,是已经完成过一次合并。

使用 Hugo 构建
主题 StackJimmy 设计