查看 git 中已删除文件的更改
Viewing changes to deleted files in git
假设当我从 master 分支出来时,在我的回购的 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
,所以我如何才能看到对 master 上的文件所做的更改,以便我可以适当地解决冲突(在在这种情况下,通过添加文件 orange.txt
和 purple.txt
)?
棘手的场景,对吧?我认为您能做的最好的事情就是找出 "when" color.txt 已被删除。如果您不合并,我会说:使用二分法找出文件何时消失,这样您就可以看到发生了什么,但是您正在合并,所以这不好。 git blame --reverse
可以有点 告诉您文件最后一次存在 在您的工作树上是什么时候。 git log --name-status -- <file-path>
还可以帮助您查看文件何时消失(以及为什么,通过写得很好的修订注释,对吧?)。我会告诉你给 difflame 一个测试驱动器(我通过混合 blame 和 diff 输出的工具可以告诉你删除行的确切修订)但我认为因为文件是 完全删除,它会崩溃..虽然不确定。这是 link 以防万一:https://github.com/eantoranz/difflame。现在...如果您能够找出文件被删除的版本,您可能会发现 为什么 它被删除并且您应该弄清楚您必须为创建一个文件添加到 color.txt 而 保持 color.txt 删除的新颜色,以便合并为 "complete".
好的,我测试了以下内容:
- 检查一个新分支 color-test
- 将 orange/purple 添加到现有的 colors.txt 并提交
- 切换回 "master"
- 删除colors.txt
- 尝试合并,失败
对我来说,git diff colors-test.. -- colors.txt
给出以下输出:
-red
-green
-blue
-yellow
-orange
-purple
其中 color-test
是我添加 orange/purple 的分支, ..(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
时,您将得到 +
而不是 -
(输入是相反的)。
希望对您有所帮助。
您可以使用此命令显示对该文件所做的所有更改:
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
假设当我从 master 分支出来时,在我的回购的 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
,所以我如何才能看到对 master 上的文件所做的更改,以便我可以适当地解决冲突(在在这种情况下,通过添加文件 orange.txt
和 purple.txt
)?
棘手的场景,对吧?我认为您能做的最好的事情就是找出 "when" color.txt 已被删除。如果您不合并,我会说:使用二分法找出文件何时消失,这样您就可以看到发生了什么,但是您正在合并,所以这不好。 git blame --reverse
可以有点 告诉您文件最后一次存在 在您的工作树上是什么时候。 git log --name-status -- <file-path>
还可以帮助您查看文件何时消失(以及为什么,通过写得很好的修订注释,对吧?)。我会告诉你给 difflame 一个测试驱动器(我通过混合 blame 和 diff 输出的工具可以告诉你删除行的确切修订)但我认为因为文件是 完全删除,它会崩溃..虽然不确定。这是 link 以防万一:https://github.com/eantoranz/difflame。现在...如果您能够找出文件被删除的版本,您可能会发现 为什么 它被删除并且您应该弄清楚您必须为创建一个文件添加到 color.txt 而 保持 color.txt 删除的新颜色,以便合并为 "complete".
好的,我测试了以下内容:
- 检查一个新分支 color-test
- 将 orange/purple 添加到现有的 colors.txt 并提交
- 切换回 "master"
- 删除colors.txt
- 尝试合并,失败
对我来说,git diff colors-test.. -- colors.txt
给出以下输出:
-red
-green
-blue
-yellow
-orange
-purple
其中 color-test
是我添加 orange/purple 的分支, ..(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
时,您将得到 +
而不是 -
(输入是相反的)。
希望对您有所帮助。
您可以使用此命令显示对该文件所做的所有更改:
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