繁体   English   中英

拉--rebase后Git推送错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM