所以我根据master重新建立了一个分支。然而,
git push --set-upstream origin MyBranch
我 ! [rejected] MyBranch -> MyBranch (non-fast-forward)
error: failed to push some refs to 'https://mygit@bitbucket.org/mygit/myproject.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.
是这样,好的。重置了。无问题完成。
git pull
* branch HEAD -> FETCH_HEAD
Ok,已经更新了
git push --set-upstream origin MyBranch
又是错误。我可以强行推动,但我不喜欢失去东西的风险,说实话,我真的很想知道这个恼人的问题的适当解决方案,即使我按照规则手册玩。
根据你的描述,我要试着做一个有根据的猜测可能发生了什么
Git拒绝将你的重基提交推送到上游分支(origin/MyBranch
),因为它们的提交哈希值与已经存在的提交哈希值不同。它们是不同的,因为你在一个不同的提交之上重新构建了本地提交,而不是在上游分支中的提交。
下面是我认为你的情况可能是什么样的一个例子:
Local Origin
A---B---C---F (master) A---B---C---F (master)
D'---E' (MyBranch) D---E (MyBranch)
-
origin/MyBranch
中的D
和E
最初是基于master
中的C
。然后F
成为master
的新HEAD
。 - 当你在
master
中做了git pull
,你在本地的repo上得到了新的F
。 - 您将
MyBranch
重新基于master
之上,现在是F
,并且将D
和E
的提交散列更改为D'
和E'
。 - 发布
git push origin MyBranch
拒绝覆盖提交,因为Git认为它们与origin
中的提交不同,后者仍然基于C
。
(可能的)解决方案
如果你是唯一一个在MyBranch
上工作的人,或者如果你可以很容易地与任何人交流,他们可能对在该分支上做工作感兴趣,我建议强制推送你的重基提交。同样,假设在此期间没有其他人将提交推送到origin/MyBranch
,您不会损失任何东西。
如果这根本不能反映你的情况,请忽略这个建议,如果可能的话,请添加更多关于问题的细节。