Git分支合并冲突排查:如何快速定位冲突代码的提交人

187 阅读2分钟

Git分支合并冲突排查:如何快速定位冲突代码的提交人

问题背景

在多人协作的Git开发流程中,我们通常会遵循以下分支策略:

  • releases分支创建feature分支进行开发
  • 开发完成后合并到develop分支
  • 最后才合并到releases分支

然而在实际操作中,我们可能会遇到这样的情况:当我们将feature分支合并到develop分支时,发现大量冲突,原因是**releases分支中存在许多develop分支中没有的代码**。与预期不符,因为理论上代码应该先进入develop分支,再进入releases分支。

这种情况在多人协作操作不规范的时候特别容易遇到。

解决方案

方法1:使用git diff(pass)

git diff releases..develop

这种方法只能显示代码差异,无法直接定位到提交人,效率较低。

方法2:使用GitLab仓库图(pass)

使用GitLab的repository graph。但是有太多其他的特性分支,我只是需要对比develop分支跟releases分支的不同。因此不行

方法3:使用GitLab的compare revisions(推荐)

GitLab的compare revisions功能可以比较两个分支的提交历史差异,能够显示哪些提交存在于一个分支而不在另一个分支中。界面使用,推荐推荐。

方法4:本地代码合并+git blame(有点麻烦,但也可以找到对应的提交人)

  1. 拉取最新代码:
git fetch origin
git checkout -b temp-merge-branch origin/develop
  1. 尝试合并releases分支:
git merge origin/releases
  1. 当出现冲突时,对冲突文件使用git blame:
git blame <冲突文件>

或者在IDE中右键冲突文件选择"Annotate with Git Blame",这样可以直观地看到每一行代码的最后修改者和提交信息。

总结

这种情况其实很难避免,因为同一个项目的开发者很多,无法完全保证每一次操作都是很正规,因此这种情况肯定会发生的。那么如何快速的找到对应的开发者就很重要,这里推荐使用方法3,界面操作,效率很高。