我有两个分支master
和develop
。在提交A
的状态下,fileA
在目录/folderX/subfolderY/fileA
中(并被跟踪)。现在,将B
提交到主服务器上,将fileA
移至父目录/folderX/fileA
(无需修改);然后是提交C
,它将对其他文件进行更多处理。在D
中提交develop
修改 fileA
并将其移至父文件夹。因此,提交D
的内容是
/folderX/subfolderY/fileA
/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
进行比较,并根据结果差异创建合并提交。我想念什么
答案 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
来获取开发版本。