我有一个文件a.txt
。
cat a.txt
> hello
a.txt
的内容是"hello“。
我做出了承诺。
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
等效的方法。有吗?
发布于 2011-10-14 03:26:03
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
中所做的那样),您将永远看不到重命名或副本,因为您已经排除了除单个路径之外的所有内容,并且根据定义,重命名或副本涉及两个路径。
发布于 2015-05-15 05:32:02
您还可以执行以下操作:
git diff rev1:file1 rev2:file2
对于您的示例,这将是
git diff HEAD^^:./a.txt HEAD:./test/a.txt
注意显式的./
--这种格式假定路径是相对于存储库的根的。(如果您在repo的根目录中,当然可以省略这一点。)
这完全不依赖于重命名检测,因为用户明确说明了要比较的内容。(因此,它在其他一些情况下也很有用,比如在git-svn环境中比较不同svn分支之间的文件。)
发布于 2018-06-24 21:07:23
如果重命名提交已暂存但尚未提交,则可以使用:
git diff --cached -M -- file.txt renamed_file.txt
https://stackoverflow.com/questions/7759193
复制相似问题