【问题标题】:How do I see the changes in a tree conflict ("deleted by us" or "deleted by them")?如何查看树冲突中的变化(“被我们删除”或“被他们删除”)?
【发布时间】:2019-07-19 19:40:16
【问题描述】:

当在 git 中合并或 rebase 两个分支时,其中一个文件已被删除但另一个文件已被修改,git 会产生冲突。 git status 将文件显示为“被我们删除”或“被他们删除”。

我发现很多关于如何解决冲突的问题,包括:

但是,大多数答案都假设您已经确切知道冲突是什么,并且只需要告诉 git 保留或删除文件。

您如何找出没有删除的文件版本中发生了什么变化git 只是将整个文件留在工作副本中,不标记任何更改。

例如:

  • 在分支develop,用户A更改文件foo.x
  • 在分支 feature 上,用户 B 重构代码,删除文件 foo.x,因为它的功能现在在其他文件中
  • 用户 B 尝试将develop 合并到feature,并得到标记为deleted by us 的冲突
  • 用户 B 如何查看用户 A 更改了什么,以查看重构代码中是否需要更改?

【问题讨论】:

    标签: git git-merge-conflict


    【解决方案1】:

    如果“被我们删除”:

    git diff <your-branch>...<branch-you're-merging-to> /path/to/file
    

    如果“被他们删除”:

    git diff <branch-you're-merging-to>...<your-branch> /path/to/file
    

    来自git-diff 手册页:

    git diff [] ... [--] [...]

    此表单用于查看包含和直到第二个 的分支上的更改,从两个 的共同祖先开始。 “git diff A...B”等价于“git diff $(git merge-base A B) B”。你可以省略 中的任何一个,这与使用 HEAD 的效果相同。

    这只会显示在未删除文件的分支中所做的更改,即如果删除文件的分支首先对其进行了任何更改,则这些更改不会反映在差异中。

    如果您是变基而不是合并,那么“被我们删除”/“被他们删除”消息将是相反的,因此请使用其他命令。

    【讨论】:

    • 有没有办法确定这两个提交,而无需手动查看日志并找到它们的提交哈希?
    • 您可以在工作之前使用merge-base &lt;your-branch&gt; &lt;branch-you're-merging-to&gt; 查找提交,然后只需使用您要合并到的分支的名称即可。
    • 我已经用更方便的形式更新了答案。
    • 谢谢!这对“被我们删除”和“被他们删除”都有效吗?变基时可以使用相同的方法吗? (对不起,如果这听起来很挑剔 - 我正在努力确保这对未来的读者来说是一个很好的参考。)
    • 我已将其更新为涵盖“由我们更新”和“由他们更新”。我认为它在变基时应该以相同的方式工作,但我没有检查过。
    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2013-10-30
    • 2013-06-09
    相关资源
    最近更新 更多