如何在RELEASE分支中压缩被同事提交隔开的自有提交且不改动该提交?
解决已合并后的提交压缩问题
操作前重要提醒
这种操作属于重写Git公共分支历史,如果RELEASE是团队共享分支,必须先和所有成员确认同意,否则会导致协作混乱和代码冲突。操作前建议先备份当前RELEASE分支:
git checkout RELEASE git branch RELEASE-backup
方法一:临时分支合并压缩(更直观)
- 找到同事提交(
colleagues-commit)的哈希值,可通过git log查看,记为C_HASH - 基于该提交创建临时分支:
git checkout -b temp-squash C_HASH
- 将你的工作分支改动一次性压缩合并到临时分支:
git merge --squash MYDEVBRANCH
此时你的3次提交的所有改动会被整合到暂存区,未生成新提交。
4. 提交压缩后的改动:
git commit -m "my-squashed-commit"
- 将RELEASE分支指向这个压缩后的提交:
git checkout RELEASE git reset --hard temp-squash
- 删除临时分支:
git branch -D temp-squash
方法二:交互式rebase重写历史(适合熟悉rebase的场景)
- 切换到RELEASE分支并确保本地最新:
git checkout RELEASE git pull
- 执行交互式rebase,目标是同事提交的父提交(
C_HASH^表示colleagues-commit的前一个提交):
git rebase -i C_HASH^
- 在弹出的编辑器中,调整提交顺序和操作:
将默认的提交列表:
pick DEV1_HASH dev-commit-1 pick C_HASH colleagues-commit pick DEV2_HASH dev-commit-2 pick DEV3_HASH dev-commit-3
修改为:
pick C_HASH colleagues-commit squash DEV1_HASH dev-commit-1 squash DEV2_HASH dev-commit-2 squash DEV3_HASH dev-commit-3
pick表示保留该提交squash表示将该提交合并到前一个提交
- 保存并关闭编辑器,Git会自动合并提交内容,若有冲突需手动解决后执行
git rebase --continue - 完成后,RELEASE分支就会变成你期望的结构
后续推送(若分支已推送到远程)
因为重写了历史,需要强制推送更新远程分支:
git push -f
务必通知团队成员更新本地分支:
git checkout RELEASE git fetch origin git reset --hard origin/RELEASE
内容的提问来源于stack exchange,提问作者Olsza100
相关产品推荐
相关产品推荐

