如何解决此git重命名/删除合并冲突?

时间:2020-10-19 16:21:11

标签: git

我有两个分支masterdevelop。在提交A的状态下,fileA在目录/folderX/subfolderY/fileA中(并被跟踪)。现在,将B提交到主服务器上,将fileA移至父目录/folderX/fileA(无需修改);然后是提交C,它将对其他文件进行更多处理。在D中提交develop 修改 fileA并将其移至父文件夹。因此,提交D的内容是

  1. 删除/folderX/subfolderY/fileA
  2. 创建/folderX/fileA

请注意,两个分支中都跟踪fileA

--A--B--C   master
   \
    D       develop

我想最后保留fileA的修改版。

现在,如果我将develop合并到master中,git会告诉我存在合并冲突,因为fileA已在master中创建但在develop中已删除。更准确地说,它指出:

CONFLICT (rename/delete): /folderX/subfolderY/fileA deleted in D develop and renamed to /folderX/fileA in HEAD. Version HEAD of /folderX/fileA left in tree.

如果我尝试使用git mergetool解决问题,git会给我通常的选择:

Deleted merge conflict for '/folderX/fileA':
  {local}: created file
  {remote}: deleted
Use (c)reated or (d)eleted file, or (a)bort?

但是,如果我选择(c)created,则会保留fileA的未修改版本。如果选择(d)eleted,我最终将没有fileA

我希望git将master的/folderX/fileA与develop的修改后的/folderX/fileA进行比较,并根据结果差异创建合并提交。我想念什么

2 个答案:

答案 0 :(得分:1)

保持文件在D中的状态,因为B仅将其重命名(与D相同):

git checkout D -- folderX/fileA

并删除索引中文件的其他冲突实例。

答案 1 :(得分:0)

您可以忽略重命名来进行git merge。

git merge -s recursive -Xno-renames develop

这将导致git报告由两个分支修改的文件。现在,您可以使用git mergetool或运行git checkout --theirs folderX/fileA来获取开发版本。

相关问题