如何仅推送特定提交的变更至远程仓库,保留仓库原有内容?
如何仅推送特定提交到远程仓库,保留现有内容
当然可行!你要的就是只把单个/特定提交的变更移植到另一个仓库,Git的cherry-pick命令正好能解决这个问题——它可以精准复制指定提交的修改,合并到目标仓库的现有分支中,完全不会覆盖仓库2里的本地化和其他原有内容。
具体操作步骤:
先把仓库2克隆到本地(如果还没做的话)
首先确保你有仓库2的本地副本,方便后续操作:git clone <仓库2的远程URL> cd <仓库2的本地目录>添加仓库1作为本地远程源
把仓库1设为本地的一个远程仓库,这样就能获取它的提交记录:git remote add repo1 <仓库1的远程URL> git fetch repo1 # 拉取仓库1的所有提交,但不会修改本地代码获取你要移植的提交哈希值
去仓库1里找到那个包含你需要更新的提交,用git log查看它的哈希值(可以取前7位,只要能唯一识别就行),比如得到哈希a1b2c3d。用cherry-pick移植指定提交
确保你在仓库2的目标分支(比如master)上,然后执行cherry-pick:git checkout master git cherry-pick a1b2c3d- 如果遇到冲突(比如提交修改了仓库2里有本地化的文件),Git会自动暂停操作并提示冲突文件。你需要手动打开这些文件,解决冲突后执行:
git add <解决冲突后的文件> git cherry-pick --continue - 如果不想处理冲突,也可以随时放弃这次操作:
git cherry-pick --abort
- 如果遇到冲突(比如提交修改了仓库2里有本地化的文件),Git会自动暂停操作并提示冲突文件。你需要手动打开这些文件,解决冲突后执行:
推送修改到仓库2的远程
确认cherry-pick成功后,把修改推送到仓库2的远程即可:git push origin master
为什么之前的推送会让两个仓库完全一致?
你之前用的git push github-repo master是把本地master分支的所有提交都推送到远程仓库,相当于用本地分支完全覆盖远程分支的内容,所以两个仓库会变得一模一样。而cherry-pick只复制指定提交的变更,是合并到现有分支上,不会影响仓库2里原本的本地化和其他修改。
补充说明:
- 如果需要移植多个连续或不连续的提交,只要把它们的哈希依次列出来就行:
要是移植连续的一段提交,可以用范围写法(注意起始提交后面加git cherry-pick 提交1哈希 提交2哈希 提交3哈希^表示包含该提交):git cherry-pick 起始提交哈希^..结束提交哈希 - 操作前最好先备份仓库2的本地分支,或者创建一个临时分支来测试cherry-pick,避免误操作影响原有内容。
内容的提问来源于stack exchange,提问作者BanikPyco
相关产品推荐
相关产品推荐

