我试图将文件扩散到另一个已重命名的分支中。我已使用
将文件重命名为原始名称git mv renamed.file original.file
git add -u original.file
git commit
这看起来就在树上,即它保留了历史。
然而,当我在两个分支中的文件之间执行git diff
时,我只是获取文件的全部a和文件b的全部 - 不是非常有用的差异输出。
有没有办法在这种情况下获得更细粒度的差异?
我尝试过:git diff -C
,git diff -M
,git diff --follow -M
和-M
具有不同的百分比,例如-M10%
- 在每种情况下我都得到相同的输出
编辑 - 有助于更快解决问题的额外信息: 该文件已在Windows上重命名和编辑,我在OSX上。 (不同的行结尾)。
答案 0 :(得分:3)
不要试图说服git重命名,你可以“强制”它来比较这两个文件。
我假设您在上次提交时重命名了该文件。
直接寻址文件 - 即使此文件仅存在于不同的分支/提交中 - 您也可以使用<reference>:<path>
语法。利用这种语法,diff
命令可能如下所示:
git diff HEAD^:renamed.file original.file
使用此命令,您可以将之前提交的renamed.file
(HEAD^
)与当前工作树的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选项