如何将多个本地提交合并为一个提交并推送到developer分支
嗨,这个需求太常见了!要把你本地的7+次提交合并成一个再推到远程developer分支,用Git的交互式变基就能轻松搞定,步骤如下:
首先确保你当前在本地的
developer分支上,如果不在的话,执行:git checkout developer接着拉取远程分支的最新状态(避免后续变基出现不必要的冲突):
git fetch origin启动交互式变基操作。因为你要合并最近的7+次提交,直接基于远程
developer分支的最新版本来变基是最稳妥的:git rebase -i origin/developer如果你能确定这7次提交是基于本地某个特定提交之后的,也可以用
git rebase -i HEAD~7(把数字7替换成你实际的提交次数)。执行命令后会打开一个文本编辑器(默认是vim,不习惯的话可以提前设置成自己常用的编辑器),里面会列出你要合并的所有提交,每一行开头是
pick关键字。
你需要把除了第一个提交之外的所有pick改成s(squash,会保留该提交的信息供你后续编辑)或者f(fixup,直接丢弃该提交的信息,合并到前一个提交)。比如:pick a1b2c3 初始化功能模块 s d4e5f6 修复按钮样式问题 s g7h8i9 优化接口请求逻辑 s j0k1l2 调整页面布局 ...保存并退出编辑器后,会弹出第二个编辑器窗口,让你编辑合并后的最终提交信息。你可以把原来的多个提交信息整理成一段清晰、完整的描述,比如“完成XX功能的开发与全流程优化”,然后保存退出。
如果变基过程中遇到代码冲突,别慌:先手动解决冲突的代码,然后执行
git add <冲突文件名>标记冲突已解决,再运行git rebase --continue继续变基流程;如果想放弃这次变基操作,直接执行git rebase --abort即可回到变基前的状态。最后,把合并后的单个提交推送到远程
developer分支:git push origin developer因为你之前从未向该分支推送过代码,所以不需要强制推送;如果之前推送过但这次修改了提交历史,才需要用
git push --force-with-lease(比--force更安全,避免覆盖其他人的提交)。
内容的提问来源于stack exchange,提问作者user9049996

