Git:文件在本地删除但远程更改。我如何看待他们的变化?

时间:2014-02-04 11:44:17

标签: c# git merge diff git-extensions

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

  

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

然后,我可以选择:“删除文件(我们的)”保留修改(他们的),或“保留基本文件”< / em>的

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

有没有人知道我可以运行的git命令会显示我的基础差异 - &gt;在这种情况下远程?在发生这种情况的那一刻,我将转到我同事的办公桌,询问他们对该文件所做的更改,以便继续我的合并。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

git merge-base <mergingBranch> HEAD

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

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

答案 1 :(得分:1)

您可以使用以下命令git在遥控器上对文件所做的更改列表:

git log -p MERGE_HEAD -- foo

<强>解释

foo是有问题的文件。

MERGE_HEAD指向您与

合并的远程分支的HEAD

-p导致log使用每次提交打印差异

答案 2 :(得分:0)

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

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

在左上角,它显示所有未分阶段的更改(由于冲突)。在它的右边,有一个相关文件的差异。它告诉我本地版本已被删除(前两行),但也显示远程更改(第3行 - 最后一行)。我对此非常满意!

Git Gui