Display the Authors and commit message for commits that cause a conflict

僤鯓⒐⒋嵵緔 提交于 2019-12-12 09:36:07

问题


I have two long-running branches dev, and a far future release called future . We create fixes for the supported release by branching from the tag that exhibits the bug, fix it, and then open pull-requests to the two branches. If there is a conflict in the 'future' branch, our developers are suppose to create a new branch, resolve the conflicts, and open another PR to future.

Unfortunately, our team is large enough that plenty of these second PRs haven't been made. I need to now figure out which exact commits caused conflicts. I can do this manually by running git blame on each conflicted file, and seeing the commits on each side of the ====== line, but that doesn't actually give me enough information, and I have to manually run git blame for every conflict and every file.

Is there an easier way? Ideally, I'd want something equivalent to:

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

for every single conflict.

Though anything that just gives me the list of conflicting commits would be useful enough to warrant the bounty.


回答1:


You could run git diff --diff-filter=U while merging to see diff output for all (and only) unmerged files. It's still with file content, but it's better than manually running a command for each file.




回答2:


You can get pretty close very easily:

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

and really, it's only the right-branch (the one being merged in) commit authors you care about -- the left-branch ones have already been merged, let whoever touched what you've already got sort it out.

Add --topo-order to the log command to list the commits for each branch together.




回答3:


You need to start using git rerere. You have to resolve the conflict once, but for almost every new rebase the old merge will do it automatically then. Sometimes you'll need to do a 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

With many coworkers add the .git/rr-cache dir to your project.

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



回答4:


You may wish to consider using a review tool such as gerrit, which detects possible merge conflicts prior to submitting a change list to a branch. I realize this doesn't help you right this second, but I believe you'll have to write a tool yourself to do what you want.



来源:https://stackoverflow.com/questions/31063684/display-the-authors-and-commit-message-for-commits-that-cause-a-conflict

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!