如何将feature/abc分支压缩后合并到无关联历史的develop分支?
解决方案:合并无关联分支并压缩提交
一、Git命令行操作步骤
1. 压缩feature/abc的所有提交
- 切换到目标分支:
git checkout feature/abc - 把所有提交压缩成单个新提交:
# 软重置到分支初始提交之前,保留所有变更 git reset --soft $(git rev-list --max-parents=0 HEAD) # 提交所有变更为一个新提交,替换成你的自定义提交信息 git commit -m "feature/abc所有变更压缩提交"
2. 合并到develop分支(保留原develop提交历史)
- 切换到develop分支:
git checkout develop - 执行合并(允许无关联历史,忽略冲突时用feature的内容覆盖):
若想用develop的内容覆盖冲突,把git merge --allow-unrelated-histories -X theirs feature/abc-X theirs改成-X ours即可。
3. 或变基到develop分支(压缩提交作为新基准)
- 切换到develop分支:
git checkout develop - 把develop变基到压缩后的feature/abc分支:
变基后,develop的原有提交会紧跟在压缩提交之后,原develop提交的哈希依然存在,随时可以检出。git rebase --onto feature/abc --root develop
二、Fork UI工具操作步骤
1. 压缩feature/abc的所有提交
- 打开Fork,左侧分支列表选中
feature/abc分支,查看右侧提交历史。 - 方式一:交互式压缩
- 右键点击分支的第一个提交(最顶端的初始提交),选择「Rebase Interactive...」。
- 在弹出窗口中,把除第一个提交外的所有
pick改成squash(或缩写s),点击「Start Rebase」。 - 编辑新的提交信息,确认后完成压缩。
- 方式二:软重置后提交
- 右键点击
feature/abc分支,选择「Reset Branch...」。 - 重置类型选「Soft」,目标选择「Root Commit」(分支初始提交的父节点),点击「Reset」。
- 所有变更回到暂存区后,点击顶部「Commit」按钮,输入提交信息完成压缩。
- 右键点击
2. 合并到develop分支
- 切换到
develop分支,点击顶部工具栏的「Merge」按钮。 - 在弹出窗口中,选择
feature/abc作为合并来源,勾选「Allow unrelated histories」。 - 点击「Conflict Resolution」下拉框,选择「Use theirs」(用feature内容覆盖冲突)或「Use ours」(用develop内容覆盖)。
- 点击「Merge」完成操作,原develop的提交历史会完整保留。
3. 或变基到develop分支
- 切换到
develop分支,右键点击左侧分支列表里的feature/abc。 - 选择「Rebase develop onto feature/abc」,在弹出窗口设置冲突解决方式(同上),确认后完成变基。
- 变基后,develop分支历史会以压缩后的提交为基准,原develop的旧提交依然能通过提交历史列表找到并检出。
内容的提问来源于stack exchange,提问作者Angad
相关产品推荐
相关产品推荐

