如何将个人Fork仓库中已Cherry-pick的Commit A更新为修订后的Commit A.1
把Cherry-pick的Commit A更新为A.1的解决方案
当然可以更新!下面是两种稳妥的方法帮你把fork仓库里的Commit A替换成修订后的A.1,同时保留你后续的Commit B:
方法一:重置后重新Cherry-pick(直观易操作)
- 首先确保本地已经拉取了原仓库的最新代码(如果还没添加原仓库远程,先执行
git remote add upstream <原仓库的Git地址>):git fetch upstream - 切换到你的工作分支(也就是包含Commit A和B的分支):
git checkout your-feature-branch-name - 找到你之前Cherry-pick的Commit A的哈希值(可以用
git log查看),假设为<old-A-hash>,重置到这个提交的前一个状态:git reset --hard <old-A-hash>^ - 现在Cherry-pick修订后的Commit A.1(哈希值可以从原仓库的PR1里找到):
git cherry-pick <A.1-hash> - 最后Cherry-pick你自己的Commit B:
git cherry-pick <B-hash> - 因为修改了提交历史,需要强制推送到你的fork仓库:
git push origin your-feature-branch-name --force
方法二:交互式变基(更高效的历史修改)
- 同样先拉取原仓库最新代码:
git fetch upstream - 切换到你的工作分支:
git checkout your-feature-branch-name - 执行交互式变基,回到Commit A的前一个提交:
git rebase -i <old-A-hash>^ - 在弹出的文本编辑器中,找到Commit A对应的那一行,把开头的
pick改成drop,保存并退出编辑器。这一步会移除旧的Commit A。 - 接着Cherry-pick修订后的Commit A.1:
git cherry-pick <A.1-hash> - 最后强制推送到你的fork:
git push origin your-feature-branch-name --force
注意事项
- 如果你是独自在这个分支上工作,强制推送完全没问题;但如果有其他协作者,一定要提前告知他们,让他们重新拉取并处理本地分支的冲突。
- 推送完成后,你之前创建的新PR会自动更新为包含Commit A.1和B的版本。
内容的提问来源于stack exchange,提问作者Ijas
相关产品推荐
相关产品推荐

