Git如何修改已推送的历史单个提交并推送回原功能分支?
问题原因
你当前处于**分离头指针(detached HEAD)**状态,没有绑定到本地的Cool_Feature_1分支,因此直接执行git push时Git找不到对应的远程分支引用,才会抛出这个错误。
修复操作步骤
- 第一步:先记录你刚才amend之后生成的新commit哈希值,执行
git log -1即可获取,假设得到的哈希为abc123def - 第二步:切回你的功能分支:
git checkout Cool_Feature_1 - 第三步:用rebase操作把原来的3个后续commit接在新修改的commit后面:
git rebase 7c802ef576fbad061c6fefb350fde386e7d09087 --onto abc123def这里的
7c802ef576fbad061c6fefb350fde386e7d09087是你最初要修改的旧commit哈希,abc123def是你刚才amend之后的新commit哈希 - 第四步:验证commit历史是否符合预期:执行
git log,确认第一个commit是你修改后的版本,后面3个commit和之前完全一致,没有额外新增提交 - 第五步:强制推送到远程功能分支即可:
git push -f origin Cool_Feature_1
可选简化方案
你也可以用交互式rebase一次性完成修改,操作更不易出错:
- 切回功能分支:
git checkout Cool_Feature_1 - 执行交互式rebase,修改最近4个commit:
git rebase -i HEAD~4 - 在弹出的编辑界面里,把你要修改的第一个commit前面的
pick改成edit,保存退出 - Git会自动停在该commit处,你修改对应的文件路径后执行
git add .+git commit --amend - 执行
git rebase --continue完成后续3个commit的自动迁移 - 验证无误后强制推送即可
内容的提问来源于stack exchange,提问作者mohnstrudel
相关产品推荐
相关产品推荐

