我有一个文件a.txt
。
cat a.txt
> hello
a.txt
的内容是“hello”。
我做出 promise 。
git add a.txt
git commit -m "first commit"
然后我将 a.txt
移动到 test
目录中。
mkdir test
mv a.txt test
然后我进行第二次提交。
git add -A
git commit -m "second commit"
最后,我编辑 a.txt
以说“再见”。
cat a.txt
> goodbye
我做了最后一次提交。
git add a.txt
git commit -m "final commit"
现在我的问题是:
如何在我的最后一次提交和第一次提交之间区分 a.txt
的内容?
我试过:
git diff HEAD^^..HEAD -M a.txt
,但这没有用。 git log --follow a.txt
正确检测到重命名,但我找不到 git diff
的等效项。有吗?
最佳答案
HEAD^^
和 HEAD
之间的区别在于,您在两个提交中都有一个 a.txt
,所以只需考虑这两个提交(这是 diff 所做的),没有重命名,有一个副本和一个更改。
要检测副本,可以使用-C
:
git diff -C HEAD^^ HEAD
结果:
index ce01362..dd7e1c6 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1 @@
-hello
+goodbye
diff --git a/a.txt b/test/a.txt
similarity index 100%
copy from a.txt
copy to test/a.txt
顺便说一句,如果您将 diff 限制在一个路径上(就像您在 git diff HEAD^^ HEAD a.txt
中所做的那样,您永远不会看到重命名或副本,因为您我们排除了除单个路径之外的所有内容,并且重命名或复制 - 根据定义 - 涉及两条路径。
关于git diff 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7759193/