重命名后的差异内容更改

3
我的项目历史记录如下:
  • 编辑文件a、b
  • 提交,版本1
  • 将文件a、b重命名为c、d
  • 提交,版本2
  • 编辑文件c、d
  • 提交,版本3

我想查看我对这两个文件进行的编辑在这些提交中的不同之处,但是git diff rev0..rev3并没有帮助,因为我只看到了文件a&b的删除,以及所有对c&d的编辑混杂在文件创建中。

如何查看一个包括rev1和rev3的差异,使得((a,c)、(b,d))被视为相同的文件,在差异中没有文件重命名的干扰?


你在重命名文件时是否执行了 git mv a c 命令?这样做可以让 Git 知道这两个文件其实是同一个文件的历史记录。 - FrenchKheldar
1
不,Git不会存储重命名信息。无论您是使用git mv还是手动移动后再使用git rm和git add,都没有关系。试一下吧;git status将为两者显示相同的结果。 - sourcejedi
3个回答

2

使用git diff -M命令。

也可以微调 - git diff -M90%,以检测相似度达到90%的文件。(不确定git status默认使用的是什么)


我尝试过 git diff -M(和 -M90%),但它在差异中没有产生任何明显的变化。我仍然看到 "deleted file a" 后面跟着一堆红色文本,"new file c" 后面跟着一堆绿色文本,而不是包含 rev1 和 rev3 更改的差异,就好像文件没有被移动一样。 - spiffytech
嗯,你需要专家:)。我之前只用过一次。我所能想到的就是查看rev1..rev2。那是简单的情况(100%相似),如果它不起作用,那么任何更难的事情都没有机会。 - sourcejedi

2
git diff -C

如果文件被重命名,差异将会显示,并且还可以检测到复制品。

如上面的答案所提到的

git diff -M

检测仅限于重命名。

1

git diff 命令接受 <rev>:<filename 类型的参数。使用 git log --follow <file> 查找所需的版本,并查看该版本中文件的名称。 例如(在我的代码中,它曾经被转换为 C++)

git diff 44308:./draw.c draw.cpp

对于你,这可能是

git diff rev1:./a c

我发现我需要指定文件的路径,否则git本身会给我提示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接