Git同一分支下如何重新应用旧提交变更并手动处理冲突?
解决方法
方法1:生成补丁并手动应用
- 先导出提交B相对于A的变更补丁:
git diff A B -- foo.cpp > b-patch.diff - 把补丁打到当前版本的文件上:
这个命令会自动尝试合并,碰到冲突时会在foo.cpp里生成和merge一样的冲突标记,你直接编辑文件解决冲突就行。git apply --3way b-patch.diff - 冲突搞定后,用
git add foo.cpp标记已解决,之后就能提交变更了。
方法2:临时分支中转合并
- 先切一个基于提交A的临时分支:
git checkout -b temp-branch A - 在临时分支上cherry-pick提交B:
这步肯定能成,毕竟B本来就是基于A改的。git cherry-pick B - 切回你的工作分支,把临时分支的foo.cpp合并进来:
git checkout your-branch git merge temp-branch --no-commit --no-ff--no-commit让Git处理合并但不自动提交,--no-ff是可选的,用来保留合并记录。这时候foo.cpp会出现冲突,手动解决后提交就好。 - 最后删掉临时分支:
git branch -D temp-branch
方法3:交互式rebase(适合分支从A分叉的情况)
如果你的工作分支是从A之后分叉出来的,试试交互式rebase:
git rebase -i A
在弹出的编辑界面里,找到提交B那一行,把pick改成edit,保存退出。Git会在应用B的时候暂停,要是有冲突(因为你后来改了A版本的文件),解决完冲突后执行git add foo.cpp,再用git rebase --continue完成操作。
内容的提问来源于stack exchange,提问作者mivkov
相关产品推荐
相关产品推荐

