如何squash来自不同设备的Git commits?
解决跨设备开发Feature分支后的Commit Squash与Master合并问题
commit的来源设备不会影响squash操作,问题出在操作流程上。以下是两种可靠的解决方案:
方案一:交互式Rebase整理Feature分支历史(推荐)
这种方式能先把feature分支的所有commit合并成一个,再合并到master,保证master历史干净:
- 拉取远程仓库最新代码:
git fetch origin - 切换到目标feature分支:
git checkout feature-branch-name - 执行交互式rebase,以远程master为基准整理commit:
git rebase -i origin/master编辑器打开后,将第一个commit以外的所有
pick替换为squash(或简写sq),保存退出后编辑合并后的commit信息,删除冗余的"Continuing X branch"类内容,编写清晰的功能说明。 - 若rebase遇到冲突,解决冲突后执行:
git add .git rebase --continue如需放弃rebase,执行
git rebase --abort - 由于修改了commit历史,强制推送更新远程feature分支(用
--force-with-lease更安全,避免覆盖他人修改):git push origin feature-branch-name --force-with-lease - 合并到master:
git checkout mastergit pull origin mastergit merge feature-branch-name
方案二:直接在Master分支上Squash合并
这种方式跳过整理feature分支,直接将所有修改合并为一个commit到master:
- 切换到master分支并拉取最新代码:
git checkout mastergit pull origin master - 执行squash合并,不自动提交:
git merge --squash feature-branch-name - 编辑合并后的commit信息并提交:
git commit -m "feat: 完成[功能名称]开发(合并原feature分支所有修改)" - 推送更新远程master:
git push origin master
注意事项
- 执行强制推送前,确认没有其他开发者在该feature分支上工作,避免覆盖他人修改
- 操作前可创建临时分支备份:
git checkout -b feature-branch-backup - 合并到master前,务必确保feature分支代码经过测试
内容的提问来源于stack exchange,提问作者user14647130
相关产品推荐
相关产品推荐

