重命名文件后,在分支之间获取有用的git diff输出

时间:2015-01-14 12:39:31

标签: git version-control

我试图将文件扩散到另一个已重命名的分支中。我已使用

将文件重命名为原始名称
git mv renamed.file original.file
git add -u original.file
git commit 

这看起来就在树上,即它保留了历史。

然而,当我在两个分支中的文件之间执行git diff时,我只是获取文件的全部a和文件b的全部 - 不是非常有用的差异输出。

有没有办法在这种情况下获得更细粒度的差异?

我尝试过:git diff -Cgit diff -Mgit diff --follow -M-M具有不同的百分比,例如-M10% - 在每种情况下我都得到相同的输出

编辑 - 有助于更快解决问题的额外信息: 该文件已在Windows上重命名和编辑,我在OSX上。 (不同的行结尾)。

2 个答案:

答案 0 :(得分:3)

不要试图说服git重命名,你可以“强制”它来比较这两个文件。

我假设您在上次提交时重命名了该文件。

直接寻址文件 - 即使此文件仅存在于不同的分支/提交中 - 您也可以使用<reference>:<path>语法。利用这种语法,diff命令可能如下所示:

git diff HEAD^:renamed.file original.file

使用此命令,您可以将之前提交的renamed.fileHEAD^)与当前工作树的original.file进行比较


您可以查看git rev-parse文档,了解有关<reference>:<path>语法的详细信息。


仍然没有成功?

如果您仍然收到相同的输出,则可能会有空格更改,让git认为这些行已更改。

在这种情况下,您可以传递git diff个其他选项来忽略空格更改:

  • --ignore-space-change或只是-b会忽略所有空格的变化;另外你可以使用
  • --ignore-space-at-eol顾名思义,只会忽略行尾的空白变化

请查看git diff documentation了解更多详情。

答案 1 :(得分:2)

尝试

git cat-file -p COMMIT:path/to/new/location > NEW
git cat-file -p COMMIT~1:path/to/old/location > OLD
diff OLD NEW

看看它们实际上有多么不同。

另外,请尝试使用--find-copies-harder选项