显示导致冲突的提交的作者和提交消息

时间:2015-06-26 01:57:28

标签: git git-commit

我有两个长期运行的分支dev,以及一个名为future的远期版本。我们通过从显示错误的标记分支,修复它,然后打开两个分支的拉取请求,为受支持的版本创建修复程序。如果'future'分支中存在冲突,我们的开发人员应该创建一个新的分支,解决冲突,并为未来打开另一个PR。

不幸的是,我们的团队足够大,以至于还没有大量的第二个PR。我现在需要弄清楚哪些确切的提交会导致冲突。我可以通过在每个冲突的文件上运行git blame来手动执行此操作,并查看======行的每一侧的提交,但这实际上并没有给我足够的信息,我必须手动运行git blame for每一个冲突和每个文件。

有更简单的方法吗?理想情况下,我想要的东西相当于:

Commit X: <coworker1> I updated something.
Commit Y: <coworker2> Something fixed.
Conflicts: 
   some/file/here
   a/different/file.

每一次冲突。

虽然只是给我提供冲突提交列表的任何内容都足以保证赏金。

4 个答案:

答案 0 :(得分:3)

您可以在合并时运行git diff --diff-filter=U以查看所有(且仅限)未合并文件的diff输出。它还有文件内容,但比为每个文件手动运行命令要好。

答案 1 :(得分:2)

你很容易接近:

git ls-files -u \
| while read conflicted; do
        echo @@@ conflicted file $conflicted touched in this merge by:
        git log HEAD...MERGE_HEAD --left-right --format='    %h %aN %s' -- "$conflicted"
done

实际上,它只是右分支(合并的那个)提交你关心的作者 - 左分支已经合并了,让任何触及你已经得到的东西的人都会把它整理出来。 / p>

--topo-order添加到log命令以列出每个分支的提交。

答案 2 :(得分:1)

您需要开始使用 git rerere 。 您必须解决冲突一次,但对于几乎每个新的rebase,旧的合并将自动执行。有时您需要git rebase --skip

https://medium.com/@porteneuve/fix-conflicts-only-once-with-git-rerere-7d116b2cec67

git config --global rerere.enabled true
git config rerere.autoupdate true
mkdir .git/rr-cache

许多同事将.git / rr-cache dir添加到您的项目中。

ln -s .git/rr-cache .git-rr-cache
git add .git-rr-cache

答案 3 :(得分:0)

您可能希望考虑使用诸如gerrit之类​​的审核工具,该工具可在将更改列表提交到分支之前检测可能的合并冲突。我意识到这并不能帮助你做到这一点,但我相信你必须自己编写一个工具来做你想做的事。