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