在一个相当大的项目中,我偶尔会在合并期间发现自己处于以下情况(我正在使用Git的Windows GUI,称为GitExtensions,但我对命令行也很满意):
文件没有本地修订版。该文件已在本地(我们的)删除,但远程修改(他们的)。
然后,我可以选择:“删除文件(我们的),”保留修改(他们的),或“保留基本文件”< / em>的
我理解这里发生了什么以及这些选项是什么,但在大多数情况下我不知道如何继续,除非我能看到对我正在合并的分支上的文件所做的更改。如果这是一个不重要的变化(空白/格式化/'使用'语句)然后它没关系,我可以保持删除,但如果他们做了一些更重要的更改,那么我将不得不花一些时间手动狩猎这些将它们合并起来。
有没有人知道我可以运行的git命令会显示我的基础差异 - &gt;在这种情况下远程?在发生这种情况的那一刻,我将转到我同事的办公桌,询问他们对该文件所做的更改,以便继续我的合并。
答案 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
指向您与
-p
导致log使用每次提交打印差异
答案 2 :(得分:0)
我使用Git Gui成功了。它是msysgit的一部分,可以从Windows资源管理器上下文菜单中访问。
在git merge
告诉我修复冲突然后提交的时候,我打开了Git Gui(见下面的截图)。
在左上角,它显示所有未分阶段的更改(由于冲突)。在它的右边,有一个相关文件的差异。它告诉我本地版本已被删除(前两行),但也显示远程更改(第3行 - 最后一行)。我对此非常满意!