让我们说,当我从master分支出来时,我的回购邮件colors.txt
分支上的文件master
包含以下内容:
red
green
blue
yellow
然后我分支到my-branch
,我在其中进行了以下更改:
colors.txt
添加red.txt
这些内容:
red
添加green.txt
这些内容:
green
添加blue.txt
这些内容:
blue
添加yellow.txt
这些内容:
yellow
现在,我需要对master进行一些更改,所以我想合并。但是,有人也将colors.txt
更改为:
red
green
blue
yellow
orange
purple
在合并期间,我得到的唯一信息是我删除了文件colors.txt
,因此如何查看主文件上的文件所做的更改,以便我能够妥善解决冲突(在这种情况下) ,通过添加文件orange.txt
和purple.txt
)?
答案 0 :(得分:3)
您可以使用以下命令显示在master上对该文件所做的所有更改:
git diff HEAD...master -- colors.txt
这应该会导致您的输出:
red
green
blue
yellow
+orange
+purple
对git diff
使用三个点将显示所有提交的更改,这些提交是第二个引用的提交的父级,但不是第一个引用的提交的父级。因此,使用此功能,您将看到如果文件尚未删除,将会合并的所有更改。
使用-- colors.txt
git diff
显示的更改仅限于该文件。
该命令的更通用版本是
git diff HEAD...MERGE_HEAD -- colors.txt
MERGE_HEAD
始终设置为合并提交,因此它可以替换合并的分支名称。使用此功能,您甚至可以设置别名以重复使用此命令:
git config --global alias.merge-diff-theirs "diff HEAD...MERGE_HEAD"
之后你可以做到
git merge-diff-theirs -- colors.txt
答案 1 :(得分:0)
棘手的场景,对吧?我认为你能做的最好的事情就是找出"当" color.txt已删除。如果你没有合并,我会说:使用一个二等分来找出文件何时消失,这样你就可以看到发生了什么,但你正在合并,这样做并不好。 git blame --reverse
可以通过告诉您工作树上文件最后一次存在的时间来帮助稍微。 git log --name-status -- <file-path>
还可以帮助您查看文件何时消失(以及为什么,通过精心编写的修订注释,对吧?)。我会告诉你给difflame一个testdrive(我通过混合blame和diff输出的工具能够告诉你删除行的确切修订)但我认为因为文件已删除< / strong>总而言之,它会破裂..但不确定。以下是以下链接:https://github.com/eantoranz/difflame。现在......如果您能够找到文件被删除的修订版本,您可能会发现为什么它已被删除,您应该弄清楚您必须为新颜色创建一个文件已添加到color.txt ,而保持color.txt被删除,以便合并完成&#34;完成&#34;。
答案 2 :(得分:0)
好的,我测试了以下内容:
对我来说,git diff colors-test.. -- colors.txt
给出了以下输出:
-red
-green
-blue
-yellow
-orange
-purple
其中color-test
是我添加橙色/紫色的分支,..(nothing)
表示HEAD
。当文件很小时,这可能没问题,但是,完全差异可能会更好。
要找出您删除文件的提交,您可以尝试类似
的内容git log --name-status -- colors.txt
并且您将找到D colors.txt
的提交,这是您删除文件的提交,在我的情况下,短哈希为e1bb165
。您可能希望在
git diff colors-test..e1bb165~1 -- colors.txt
给了我
green
blue
yellow
-orange
-purple
当您将-R
切换到git diff
时,您将获得+
而不是-
(输入被反转)。
希望有所帮助。