Git CONFLICT (rename/delete)冲突原因及解决方法咨询
解决Git中CONFLICT (rename/delete)冲突的问题
冲突原因分析
你遇到的这个冲突,本质是Git的文件追踪机制在起作用。虽然你认为其他分支不存在这个被删除的迁移文件,但实际上在develop分支的提交历史里,这个文件被重命名成了database/migrations/2021_03_12_082940_add_exercise_group_id_exercise_table.php。当你尝试推送develop时,Git发现两个分支对同一个文件的操作矛盾:master分支删除了原文件,而develop分支将原文件重命名保留,因此触发了CONFLICT (rename/delete)冲突。
先确认冲突细节
在动手解决前,建议先确认文件的历史变更,避免误操作:
- 运行
git status,查看冲突状态,你会看到类似deleted by us: [原迁移文件名]和renamed by them: [原迁移文件名] -> [新文件名]的提示 - 用
git log --follow -- [原迁移文件名]追踪文件历史,能清晰看到它在develop分支中被重命名的记录
解决方案
根据你的需求,有两种处理方式:
方案1:保留重命名后的文件(推荐,因为文件仍在工作树中)
如果这个重命名后的迁移文件是需要保留的,按以下步骤操作:
- 标记重命名后的文件为已解决:
git add database/migrations/2021_03_12_082940_add_exercise_group_id_exercise_table.php - 确认原文件的删除状态(如果Git提示原文件已被删除,可跳过此步):
git rm [原迁移文件名] - 提交冲突解决:
git commit -m "Resolve rename/delete conflict: keep renamed migration file" - 正常推送
develop分支:git push origin develop
方案2:跟随master分支删除该文件(若重命名后的文件无保留必要)
如果这个重命名后的文件是多余的,想完全删除:
- 删除工作树中的重命名文件:
rm database/migrations/2021_03_12_082940_add_exercise_group_id_exercise_table.php - 标记文件删除状态:
git rm database/migrations/2021_03_12_082940_add_exercise_group_id_exercise_table.php - 提交冲突解决:
git commit -m "Resolve rename/delete conflict: remove migration file as in master" - 推送分支:
git push origin develop
小提示
Git的重命名识别是基于文件内容相似度的,哪怕你手动复制文件内容到新文件再删除原文件,Git也可能将其识别为重命名操作。以后跨分支操作文件时,建议先用git log --follow追踪文件历史,避免这类隐藏的冲突。
内容的提问来源于stack exchange,提问作者JEJ
相关产品推荐
相关产品推荐

