在git merge中忽略空格重命名检测

时间:2018-04-16 22:28:59

标签: git

我有一个git repo,其中几乎每个文件都需要重命名,并进行转换,对~5%的行进行实质性更改,但更改几乎每行的前导空格。

我在两次提交中做到了这一点。在第一次提交中,我将每个文件从旧文件名重命名为新文件名,但没有进行任何其他更改。在第二次提交中,我将转换应用于内容。

现在我希望能够在转换之前合并分支。看起来像这样的东西会起作用:

git merge foo-branch -s recursive -Xignore-all-space -Xpatience

但看起来-Xignore-all-space不适用于重命名检测,因此输出如下:

CONFLICT (modify/delete): old-filename.js deleted in HEAD and modified in foo-branch. Version foo-branch of old-filename.js left in tree.

1 个答案:

答案 0 :(得分:3)

要合并转换,请至少执行以下两个步骤:

$ git checkout mybranch
$ git merge <the-rename-commit>
[deal with any issues here and commit if the merge failed]
$ git merge <commit-after-rename>

对于特别棘手或困难的情况,您需要三个步骤:

$ git checkout mybranch
$ git merge <commit-just-before-mass-rename>
[deal with any issues here and commit if the merge failed]
$ git merge <the-rename-commit>
$ git merge <commit-after-rename>

这里的想法是在(可能包括)重命名之前处理所有,然后处理重命名(仅限),然后在 >重命名。

(在你的情况下,你会想要至少在第一个和最后一个标志上运行带有-X标志的所有三个步骤。它可能对中间步骤没有任何影响。)

请注意,Git版本2.18有一个新功能:当它检测到某些更高级别目录中的文件的大量重命名时,它将以相同的方式重命名新添加的文件。有关(不多)详细信息,请参阅the release notes。如果您的Git早于2.18,或者该功能失效,您可能希望将重命名本身与--no-commit合并,以便您可以在手动提交之前修复路径名。