所以我在github中分叉了一个项目,并且由于'push'命令期间的错误要求我首先执行'pull',因此无法将我的本地更改推送到我的原始repo。好吧问题是'pull'会一直覆盖我所有的本地提交。
以下示例:
我在github上有一个项目A(remote = upstream),我分成了我自己的项目(remote = origin)。然后我创建了一个分支“branch_a”,其中我添加了所有补丁更改并将此分支推送到我的远程源repo。我最后用多次提交来破坏整个过程,所以我需要将我的提交压缩成一个,以便提交一个Pull Request来将我的更改发送到项目A.尝试压缩我的提交并与上游repo同步如下:
git rebase -i upstream / master
我看了4次提交并选择了我想要的那个并删除了其他的
git push origin branch_a
收到错误:
! [已拒绝] branch_a - > branch_a(非快进) 错误:无法将某些引用推送到“https://github.com/#####/#####.git” 为了防止您丢失历史记录,拒绝了非快进更新 在再次推送之前合并远程更改(例如'git pull')。见 有关详细信息,请参阅“git push --help”的“快速转发”部分。
拉下拉命令:
git pull origin branch_a
收到消息:
- branch branch_a - > FETCH_HEAD 通过递归合并。 libpex / INSTALL | 364 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++ ++++ 1个文件已更改,364个插入(+),0个删除( - ) 创建模式100644 libpex / INSTALL
本地提交被pull命令完全覆盖(我试图删除此文件大约10次,但它会不断回来)。
所以现在我又回到了4次提交,我不能为我的生命推动正确的提交回到我的原始回购。我该怎么办?
答案 0 :(得分:1)
如果你想告诉Git推送你拥有的东西并覆盖目的地的任何东西(这可能会破坏历史记录,所以请小心使用它)然后将--force
提供给你的推送声明:
git push --force origin branch_a
这将导致origin/branch_a
分支更新为指向本地branch_a
分支,无论它是否是快进。 从origin/branch_a
可以从本地branch_a
分支或任何其他远程分支无法访问的任何提交都将在远程存储库中丢失。