繁体   English   中英

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

[英]Viewing changes to deleted files in git

假设当我从master分支出来时,我的repo的master分支上有一个文件colors.txt ,其中包含以下内容:

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 

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

red
green
blue
yellow
orange
purple

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

您可以使用以下命令在master上显示对该文件所做的所有更改:

git diff HEAD...master -- colors.txt

在您的情况下,这应该导致以下输出:

red
green
blue
yellow
+orange
+purple

git diff使用三个点将显示所有提交的更改,这些更改是第二个引用提交的父级,而不是第一个引用提交的父级。 因此,使用此操作,您将看到如果尚未删除文件则将合并的所有更改。

通过使用-- colors.txtgit 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

棘手的场景,对不对? 我认为您可以尝试做的最好的就是找出“何时” color.txt被删除。 如果您没有合并,我会说:使用二等分线找出文件消失的时间,这样您就可以看到发生了什么,但是您正在合并,所以这不好。 git blame --reverse可以通过告诉您文件何时最后一次出现在您的工作树上而有所帮助。 git log --name-status -- <file-path>还可以帮助您查看文件何时消失(以及为什么要通过写得很好的修订注释,对吗?)。 我会告诉您给difflame一个testdrive(我通过混合blame和diff输出使用的工具可以告诉您删除行的确切版本),但是我认为因为文件被完全删除了,它将打破..虽然不确定。 这是链接,以防万一: https : //github.com/eantoranz/difflame 现在...如果您能够找出删除该文件的版本,您可能会发现为什么删除该文件,并且应该弄清楚必须为添加到color.txt的新颜色创建一个文件。 同时保持color.txt删除,以便合并“完成”。

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

  • 签出新的分支颜色测试
  • 将橙色/紫色添加到现有的colors.txt中并提交
  • 切换回“主人”
  • 删除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 ,将得到+而不是- (输入是反向的)。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM