【问题标题】:Git: File deleted locally but changed remotely. How do I see their changes?Git:文件在本地删除但远程更改。我如何看到他们的变化?
【发布时间】:2014-02-04 11:44:16
【问题描述】:

在一个相当大的项目中,我偶尔会在合并期间发现自己处于以下情况(我正在使用名为 GitExtensions 的 Git 的 Windows GUI,但我对命令行同样满意):

文件没有本地修订。该文件已在本地(我们的)被删除,但在远程(他们的)被修改。

然后我可以选择:“删除文件(我们的)”、“保留修改的(他们的)”或“保留基本文件”。

我了解这里发生了什么以及这些选项是什么,但在大多数情况下,我不知道如何继续,除非我可以看到对我正在合并的分支上的文件所做的更改。如果这是一个不重要的更改(空格/格式化/'使用'语句)然后没关系,我可以保留删除,但如果他们做了一些更重要的更改,那么我将不得不花一些时间手动搜索这些向下并合并它们。

有谁知道我可以运行的 git 命令,它会在这种情况下向我显示 base -> remote 的差异?发生这种情况时,我会走到同事的办公桌前,询问他们对该文件做了哪些更改,以便我继续合并。

【问题讨论】:

    标签: c# git merge diff git-extensions


    【解决方案1】:

    嗯,这不是最好的解决方案,但它可能是最简单的。如果您在 Git 中开始合并(但在您采取行动之前),Git 将在您需要合并的文件所在的位置创建一个 .BASE、.LOCAL 和 .REMOTE 文件。

    在我上面概述的情况下,.LOCAL 或 .REMOTE 将丢失(取决于谁删除了文件),但您仍然可以转到相关文件夹并手动区分 .BASE -> .REMOTE 或.BASE -> .LOCAL。

    这对于 Windows 用户来说可能是最简单的。

    如果你真的想使用命令行你可以运行

    git merge-base <mergingBranch> HEAD
    

    找出基本提交哈希。然后,使用上面 bundacia 的部分答案:

    git difftool <mergeBase>..MERGE_HEAD -- foo.file
    

    【讨论】:

    • 稍微简化一下,git diff ...MERGE_HEAD -- foo.file 通常应该可以工作。
    【解决方案2】:

    您可以使用以下命令 git 列出对远程文件所做的更改:

    git log -p MERGE_HEAD -- foo
    

    说明:

    foo 是有问题的文件。

    MERGE_HEAD 指向要合并的远程分支的 HEAD

    -p 导致日志打印每次提交的差异

    【讨论】:

    • 谢谢,这已经很接近了!我正在尝试使用当前的 difftool,但我需要引用合并基础提交才能做到这一点。到目前为止,我有: git difftool MERGE_BASE..MERGE_HEAD $file,但似乎没有 MERGE_BASE 之类的东西......在任何地方都有这些“快捷方式”的列表吗?
    • 它们只是 .git 目录中的文件(尽管我不确定它在 Windows 中是否有不同的名称)。这是我所看到的:COMMIT_EDITMSG、FETCH_HEAD、HEAD、MERGE_HEAD、MERGE_MODE、MERGE_MSG、ORIG_HEAD
    • “合并基地”是什么意思?那可能只是HEAD吗? FETCH_HEAD 和 MERGE_HEAD 看起来是一回事。
    • Merge_base 是 git merge-base 的结果。当您进行三向合并时,它会告诉您基本修订版的提交哈希。我认为 Git 需要保留对它的引用。
    【解决方案3】:

    我成功使用了 Git Gui。它是 msysgit 的一部分,可以从 Windows 资源管理器上下文菜单中访问。

    在git merge 告诉我修复冲突然后提交时,我打开了 Git Gui(见下面的屏幕截图)。

    在左上角,它显示了所有未暂存的更改(由于冲突)。在它的右侧,有问题文件的差异。它告诉我本地版本已被删除(前两行),但也显示远程更改(第三行最后一行)。我对此很满意!

    【讨论】:

      猜你喜欢
      • 2013-10-30
      • 2016-08-10
      • 2011-05-18
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多