合并branch A至Master时file1、file2丢失,如何保留分支更改?
问题背景
时间线 t1 < t2 < t3:
- t1:从master分支创建branch A,在branch A中创建并提交file1和file2;
- t2:将branch A合并至master,合并后在master分支删除并提交了file1和file2;
- t3:尝试将branch A合并至master,合并后master中file1和file2丢失,且未触发冲突;
已尝试操作:
- 将branch A合并至master,合并后file1和file2丢失;
- 将branch A变基至master,变基后file1和file2丢失;
问题:如何通过合并或其他操作让master分支保留file1和file2?
解决方案
方案1:直接从branch A恢复文件
这是最直接的处理方式:
- 切换到master分支:
git checkout master - 从branch A拉取需要保留的文件:
git checkout branchA -- file1 file2 - 提交恢复操作:
git commit -m "Restore file1 and file2 from branchA"
方案2:合并时强制保留branch A的文件
如果需要通过合并操作实现,可利用Git合并策略选项强制保留branch A的文件版本:
- 确保当前处于master分支:
git checkout master - 执行合并并指定保留branch A的文件:
git merge -X theirs branchA - 若Git未自动提交,手动提交合并结果:
git commit -m "Merge branchA and restore file1, file2"
原因说明
直接合并或变基后文件丢失,是因为Git默认以最新变更记录为准:master分支在t2执行的删除操作时间线晚于branch A中创建文件的操作,且branch A后续未对这两个文件做新修改,所以Git会保留删除状态,不会触发冲突。
内容的提问来源于stack exchange,提问作者therageofshiva
相关产品推荐
相关产品推荐

