重命名检测,在 git 合并中忽略空格

  • 本文关键字:空格 合并 git 重命名 git
  • 更新时间 :
  • 英文 :


我有一个 git 存储库,几乎每个文件都需要重命名,并进行了对 ~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.

要合并转换,请至少通过两个步骤进行:

$ 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 有一个新功能:当它检测到某个更高级别目录中的文件大量重命名时,它将以相同的方式重命名新添加的文件。 有关(不多(详细信息,请参阅发行说明。 如果您的 Git 早于 2.18,或者该功能出现故障,您可能需要将重命名本身与 --no-commit 合并,以便在手动提交之前修复路径名。

最新更新