推送前未新建分支,如何将已合入master的历史提交拆分到独立分支
Git提交拆分操作步骤
- 先同步本地master与远程仓库的最新内容
git checkout master git pull origin master
- 基于当前master新建独立功能分支newbranch
git checkout -b newbranch
- 执行
git log --oneline查找提交D对应的哈希值,将newbranch回退到D提交的位置,移除该分支上不需要的E、F提交
git reset --hard <D提交的哈希值>
- 切换回master分支,使用交互式变基移除C、D提交
git checkout master git rebase -i <B提交的哈希值>
在弹出的编辑界面中,将C、D两行前的pick修改为drop,保存退出后Git会自动生成移除C、D后的提交序列,即A - B - E - F。如果变基过程中出现代码冲突,修改冲突文件后执行git add <冲突文件名>,再执行git rebase --continue即可完成流程。
- 推送修改后的内容到远程仓库
# 强制推送修改后的master分支,仅适用于你自己fork的仓库 git push -f origin master # 推送新建的功能分支到远程 git push origin newbranch
注意事项
- 强制推送会覆盖远程master的提交历史,请确认操作前已经完成内容备份,且仅操作你自己拥有完全权限的fork仓库,不要向上游原仓库执行强制推送
- 如果提交C、D和后续的E、F存在代码依赖,变基后需要验证master分支的功能可用性
内容的提问来源于stack exchange,提问作者Nicolas Boyer
相关产品推荐
相关产品推荐

