Git技术问询:如何从分支中保留指定标记提交、移除其余提交并合并后从Develop分支变基
需求可实现,具体操作步骤如下
完全可以实现!给你拆解一下具体操作步骤,操作前记得先备份分支,避免误操作找不回数据:
第一步:先备份当前工作分支(关键防护步骤)
操作前一定要先给当前工作分支做个备份,万一操作出岔子还能快速回滚:
git branch backup-working-branch
第二步:交互式变基筛选并合并task-a相关提交
我们用交互式变基来剔除不需要的提交,同时把保留的task-a提交合并成一个:
- 因为当前目标提交共5个,直接运行命令:
git rebase -i HEAD~5
- 执行后会弹出文本编辑器(默认是vim,要是你不习惯可以提前换成VS Code这类可视化编辑器),里面会列出这5个提交,顺序是从上到下对应最早到最新的提交,大概是这个样子:
pick commithash1 [task-a] lorem ipsum pick commithash2 [task-a] dolor sit amet pick commithash3 [task-b] consectetur adipiscing pick commithash4 [task-c] elit se do pick commithash5 [task-a] eiusmod tempor - 修改每行开头的指令:
- 保留
commithash1开头的pick(作为合并后的基础提交) - 把
commithash2和commithash5开头的pick改成squash(要是你只想保留第一个提交的信息,也可以改成fixup,它会直接丢弃后续提交的信息) - 把
commithash3和commithash4开头的pick改成drop(直接剔除这些无关提交)
修改后应该是这样:
pick commithash1 [task-a] lorem ipsum squash commithash2 [task-a] dolor sit amet drop commithash3 [task-b] consectetur adipiscing drop commithash4 [task-c] elit se do squash commithash5 [task-a] eiusmod tempor - 保留
- 保存并退出编辑器(vim里按
Esc输入:wq回车即可),此时Git会自动合并这三个task-a提交,然后再次弹出编辑器让你编辑合并后的最终提交信息,修改完成后保存退出就好。
第三步:将合并后的提交变基到Develop分支
现在把处理好的提交变基到最新的Develop分支上:
- 先确保本地Develop分支是最新版本:
git checkout develop && git pull
- 切回你的工作分支(嫌输分支名麻烦的话,用
git checkout -可以直接切回上一个分支):
git checkout your-working-branch # 替换成你的工作分支实际名称
- 执行变基操作:
git rebase develop
- 如果变基过程中出现冲突,Git会提示你解决冲突。解决完冲突后,运行
git add .标记冲突已解决,再用git rebase --continue继续变基,直到整个流程完成。
补充小提示
- 如果你的提交数量不止5个,或者不确定具体数量,可以用
git log --oneline查看所有提交的哈希和信息,然后用git rebase -i <commithash1之前的那个提交哈希>来指定变基的起始点,这样会列出从该点之后的所有提交。 - 如果交互式变基操作中出现问题,直接用
git rebase --abort回退到操作前的状态,再从备份分支恢复就行。
内容的提问来源于stack exchange,提问作者darksoulsong
相关产品推荐
相关产品推荐

