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

Git 显示导致冲突的提交的作者和提交消息,git,git-commit,Git,Git Commit,我有两个长期运行的分支dev,还有一个叫做future的未来版本。我们通过从显示bug的标记分支,为受支持的版本创建修复,修复它,然后打开对这两个分支的拉请求。如果“未来”分支中存在冲突,我们的开发人员将创建一个新分支,解决冲突,并为未来打开另一个PR 不幸的是,我们的团队足够大,以至于很多这样的第二个PRs还没有制作出来。我现在需要弄清楚哪些确切的提交导致了冲突。我可以通过对每个冲突的文件运行git Dull,并查看===行每一侧的提交来手动完成这项工作,但这实际上并没有给我足够的信息,我必须

我有两个长期运行的分支
dev
,还有一个叫做
future
的未来版本。我们通过从显示bug的标记分支,为受支持的版本创建修复,修复它,然后打开对这两个分支的拉请求。如果“未来”分支中存在冲突,我们的开发人员将创建一个新分支,解决冲突,并为未来打开另一个PR

不幸的是,我们的团队足够大,以至于很多这样的第二个PRs还没有制作出来。我现在需要弄清楚哪些确切的提交导致了冲突。我可以通过对每个冲突的文件运行git Dull,并查看
===
行每一侧的提交来手动完成这项工作,但这实际上并没有给我足够的信息,我必须对每个冲突和每个文件手动运行git Dull

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

Commit X: <coworker1> I updated something.
Commit Y: <coworker2> Something fixed.
Conflicts: 
   some/file/here
   a/different/file.
提交X:我更新了一些东西。 Y:有固定的东西。 冲突: 这里有一些 a/不同的/文件。 每一次冲突


尽管任何只给我冲突提交列表的东西都会非常有用,足以保证获得赏金。

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

< P>您可能希望考虑使用GeRIT之类的审查工具,它在提交更改列表到分支之前检测可能的合并冲突。我意识到这一秒对你没有帮助,但我相信你必须自己编写一个工具来做你想做的事情。

你需要开始使用git Reere。 您必须解决一次冲突,但对于几乎每一个新的重基,旧的合并都会自动完成。有时您需要执行一个git rebase--skip

与许多同事一起将.git/rr缓存目录添加到项目中

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

您可以非常轻松地接近:

git ls-files -u | cut -f2- | uniq \
| 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
实际上,只有右分支(正在合并的分支)提交您关心的作者——左分支已经合并,让任何接触到您已经得到的内容的人来整理它


--topoorder
添加到log命令中,以将每个分支的提交一起列出。

了解这一点很有用,但没有帮助。我的目标是让引起冲突的团队成员解决冲突。除非必须,否则我不想自己解决它。这看起来很有希望。抱歉,这不是问题的确切答案,但对您的工作流问题有很大帮助。我现在可以与许多分支机构合作,在将其重新定位到新基础上时,不必担心合并冲突。我甚至把它自动化了。有时我会做一个关于“如何在git中维护fork”或“如何重新设置我的>10个开发分支的每日基础”的演示。谢谢你的回答,你能详细介绍一下你写的代码吗?看起来它不起作用了(至少对我来说是这样)。@RajPawanGumdal有一个
| cut-f2-| uniq
被遗漏了
git ls-files -u | cut -f2- | uniq \
| 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