在git中查看已删除文件的更改

时间:2017-07-05 20:46:34

标签: git git-merge merge-conflict-resolution

让我们说,当我从master分支出来时,我的回购邮件colors.txt分支上的文件master包含以下内容:

red
green
blue
yellow

然后我分支到my-branch,我在其中进行了以下更改:

  1. 删除colors.txt
  2. 添加red.txt这些内容:

    red
    
  3. 添加green.txt这些内容:

    green
    
  4. 添加blue.txt这些内容:

    blue
    
  5. 添加yellow.txt这些内容:

    yellow
    
  6. 现在,我需要对master进行一些更改,所以我想合并。但是,有人也将colors.txt更改为:

    red
    green
    blue
    yellow
    orange
    purple
    

    在合并期间,我得到的唯一信息是我删除了文件colors.txt,因此如何查看主文件上的文件所做的更改,以便我能够妥善解决冲突(在这种情况下) ,通过添加文件orange.txtpurple.txt)?

3 个答案:

答案 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)

棘手的场景,对吧?我认为你能做的最好的事情就是找出&#34;当&#34; 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)

好的,我测试了以下内容:

  • 结帐新分支 color-test
  • 将橙色/紫色添加到现有 colors.txt 并提交
  • 切换回&#34; master&#34;
  • 删除 colors.txt
  • 尝试合并,但失败

对我来说,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时,您将获得+而不是-(输入被反转)。

希望有所帮助。