[英]Git push error after pull --rebase
我将更改从远程repo upstream master
更改为我的本地dev
分支,然后尝试使用以下命令将更改推送到我的repo:
git pull --rebase upstream master
git push origin dev
但后来的命令导致了这个错误:
error: failed to push some refs to 'https://github.com/m-adil/some_repo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这是我第三次面对的,但还没有找到完美的解决方案。 做git pull ...
正如在第二行最后一行中所建议的那样,导致再次产生所有冲突,这会破坏最近的git pull --rebase ...
在这种情况下, git reset --hard HEAD@{1}
补救,但在这种情况下推动更改的最佳方法是什么?
我对此进行了探索,并在此处发现了几个类似的问题,但有一些细微的区别,并没有向我澄清这个问题。 大多数选定的答案建议做git push --force origin my_branch
但它也有缺点,并且可以在远程中丢失他的更改,因此无法建议。 我所知道的最好的事情是创建和结账到一个新的分支 ,这比许多其他答案/解决方案更好。 但这更像是摆脱这个问题的伎俩而不是处理这种情况的正确方法。 那么,在这种情况下,是否可以通过分享正确的方法澄清任何机构?
由于您的dev
分支是私有的,并且您是目前唯一使用它的人,因此重写其历史然后进行强制推送没有任何内在错误。 正如您所指出的,解决您遇到的错误的方法是强行推送到遥控器,例如
git push --force origin dev
这将使用您在本地拥有的内容覆盖远程dev
分支。 但是,由于除了你自己以外没有其他人可以看到这个,所以应该是安全的。
通过图表的方式,考虑dev
开始在远程master
上进行一次超出master
更多提交:
master: ... A -- B -- C
\
dev: D
现在,其他人已经在master
身上做了一些工作,并推动了这项工作。 让我们说它只是一个提交,让我们留下这个:
master: ... A -- B -- C -- E
\
dev: D
在本地,你在master
上做了dev
的rebase,它为我们提供了以下分支(注意一个dev
标记为local):
master: ... A -- B -- C -- E
\ \
dev: D \
\
local-dev: D'
但是现在,当你尝试将local-dev
推送到远程dev
,Git会感到困惑。 它很混乱,因为远程的是在C
之上的D
提交。 但是你想要推动的本地分支机构已将E--D'
提交到C
之上。 它无法自动解决此问题,因此失败。 做推力会绕过这个,这在你的情况下应该是可接受的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.