【问题标题】:Display the Authors and commit message for commits that cause a conflict显示导致冲突的提交的作者和提交消息
【发布时间】:2015-09-12 20:19:56
【问题描述】:

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

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

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

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

针对每一个冲突。

尽管任何只是给我提供冲突提交列表的东西都足以保证赏金。

【问题讨论】:

    标签: git git-commit


    【解决方案1】:

    你可以很容易地接近:

    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
    

    实际上,你关心的只是右分支(被合并的那个)提交作者——左分支的已经被合并了,让任何触及你已经得到的东西的人来解决。

    将--topo-order 添加到日志命令中以将每个分支的提交一起列出。

    【讨论】:

    • 感谢您的回答,您能详细说明您编写的代码吗?看起来它不起作用(至少对我来说)。
    • @RajPawanGumdal 有一个 | cut -f2- | uniq 遗漏了
    【解决方案2】:

    您需要开始使用 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 目录添加到您的项目中。

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

    【讨论】:

    • 这看起来很有希望。
    • 这不是问题的确切答案,抱歉,但它对您的工作流程问题有很大帮助。我现在可以与许多分支一起工作,并且在将其重新定位到新的基础上时不必担心合并冲突。我什至自动化了它。有时我必须做一个关于“如何在 git 中维护一个分支”或“我如何每天 rebase 我的 >10 个开发分支”的演讲。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 知道这一点很有用,但无济于事。我的目标是让导致冲突的团队成员解决问题。除非必须,否则我不想自己解决。
      猜你喜欢
      • 2013-08-12
      • 2020-09-12
      • 1970-01-01
      • 2017-05-29
      • 2021-09-12
      • 1970-01-01
      • 2014-08-20
      • 2012-08-02
      • 2011-12-19
      相关资源
      最近更新 更多