重命名文件后,在分支之间获得有用的 git 差异输出
Getting useful git diff output between branches after a file has been renamed
我正在尝试比较另一个分支中的文件,该文件已重命名。我已使用
将文件重命名回其原始名称
git mv renamed.file original.file
git add -u original.file
git commit
这在树中看起来是正确的,即它保留了历史。
但是,当我在两个分支中的文件之间执行 git diff
时,我只是获取了所有文件 a 和所有文件 b - 不是非常有用的 diff 输出。
在这种情况下有没有办法获得更细粒度的差异?
我试过:git diff -C
、git diff -M
、git diff --follow -M
和 -M
,使用不同的百分比,例如-M10%
- 在每种情况下我得到相同的输出
编辑 - 有助于更快解决问题的额外信息:
文件已在 Windows 重命名和编辑,我在 OSX。 (不同的行结尾)。
与其试图说服 git 发生了重命名,不如 "force" 比较两个文件。
我假设您在上次提交时重命名了该文件。
要直接寻址文件 - 即使此文件仅存在于不同的 branch/commit - 您可以使用 <reference>:<path>
语法。利用此语法,diff
命令可能如下所示:
git diff HEAD^:renamed.file original.file
使用此命令,您可以将上一次提交 (HEAD^
) 的 renamed.file
与当前 工作树 的 original.file
进行比较.
您可以查看 git rev-parse
文档以了解有关 <reference>:<path>
语法的详细信息。
还是没有成功?
如果您仍然收到相同的输出,则可能是您更改了空格,这让 git 认为这些行已更改。
在这种情况下,您可以传递 git diff
更多选项来忽略空白更改:
--ignore-space-change
或只是 -b
将忽略所有空白更改;或者你可以使用
--ignore-space-at-eol
顾名思义,它只会忽略行尾的空格更改
查看 git diff
documentation 了解更多详情。
尝试
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 选项
我正在尝试比较另一个分支中的文件,该文件已重命名。我已使用
将文件重命名回其原始名称git mv renamed.file original.file
git add -u original.file
git commit
这在树中看起来是正确的,即它保留了历史。
但是,当我在两个分支中的文件之间执行 git diff
时,我只是获取了所有文件 a 和所有文件 b - 不是非常有用的 diff 输出。
在这种情况下有没有办法获得更细粒度的差异?
我试过:git diff -C
、git diff -M
、git diff --follow -M
和 -M
,使用不同的百分比,例如-M10%
- 在每种情况下我得到相同的输出
编辑 - 有助于更快解决问题的额外信息: 文件已在 Windows 重命名和编辑,我在 OSX。 (不同的行结尾)。
与其试图说服 git 发生了重命名,不如 "force" 比较两个文件。
我假设您在上次提交时重命名了该文件。
要直接寻址文件 - 即使此文件仅存在于不同的 branch/commit - 您可以使用 <reference>:<path>
语法。利用此语法,diff
命令可能如下所示:
git diff HEAD^:renamed.file original.file
使用此命令,您可以将上一次提交 (HEAD^
) 的 renamed.file
与当前 工作树 的 original.file
进行比较.
您可以查看 git rev-parse
文档以了解有关 <reference>:<path>
语法的详细信息。
还是没有成功?
如果您仍然收到相同的输出,则可能是您更改了空格,这让 git 认为这些行已更改。
在这种情况下,您可以传递 git diff
更多选项来忽略空白更改:
--ignore-space-change
或只是-b
将忽略所有空白更改;或者你可以使用--ignore-space-at-eol
顾名思义,它只会忽略行尾的空格更改
查看 git diff
documentation 了解更多详情。
尝试
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 选项