如何将BitBucket的Git仓库A多提交合并为单个提交推送到CodeCommit仓库B?
如何将Git仓库A的多次提交合并为单个提交推送到仓库B
方法一:用交互式变基合并提交
- 先拉取仓库A的最新代码到本地开发分支:
git checkout <你的开发分支名> git pull origin <你的开发分支名> - 找到要合并的提交起始点,比如合并最近3次提交,或者指定某个提交哈希:
# 合并最近N次提交,把N换成实际数量 git rebase -i HEAD~N # 或者从某个特定提交开始合并,把<起始提交哈希>换成实际哈希值 git rebase -i <起始提交哈希>^ - 弹出编辑器后,把第一个提交以外的
pick改成squash(或简写s),保存退出。之后会让你编辑新的提交信息,把原来的多次提交信息整合或者写个清晰的描述就行。 - 如果还没把仓库B加成本地远程,先添加:
git remote add repo-b <仓库B的CodeCommit地址> - 最后把合并后的提交推去仓库B的目标分支:
git push repo-b <你的开发分支名>:<仓库B的目标分支名>提示:要是仓库B的目标分支没人改动过,直接推就行;如果有冲突,得先拉取B的代码处理冲突再推,但按你的场景,应该不会有这情况。
方法二:用重置+重新提交的方式
- 同样先拉取仓库A的最新代码:
git checkout <你的开发分支名> git pull origin <你的开发分支名> - 用
--soft参数重置到起始提交,这样工作区的修改会保留:git reset --soft <起始提交哈希> - 此时所有修改都在暂存区,直接提交成一个新的提交:
git commit -m "合并提交:[这里写你的功能/变更描述]" - 推送到仓库B:
git push repo-b <你的开发分支名>:<仓库B的目标分支名>
要注意的点
- 别在公共分支上搞变基或重置,只在你自己的开发分支操作,不然会搞乱别人的代码。
- 推送前一定要确认测试、进度都搞定了,毕竟推去B之后,原来的多次提交就合并成一个了,没法再拆分。
- 要是仓库B的分支是受保护的,得确保你有推送权限,符合仓库的规则。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

