git diff 重命名文件

标签 git diff rename

我有一个文件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/

相关文章:

diff - 如何提取统一差异样式的补丁子集?

image-processing - 获取类似于 ImageMagick 输出的感知差异输出图像

linux - Bash递归地替换名称上的许多空格

copy - Gradle - 复制/重命名文件 - 使所有文件的文件大小/字节为 0

git - 为什么 git commit -a 不添加新文件?

php - 带 git pull 的 Shell_exec?

git - 用 Git 备份数据库 - 好主意?

两个文件内容之间的差异

Git push origin master 超时

重命名列表中数据集中的变量(列)