再次:快进错误

Once again: fast-forward error

所以我根据 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

好的,已经是最新的了

git push --set-upstream origin MyBranch

又是错误。我可以强行推动,但我不喜欢丢失东西的风险,老实说,我真的很想知道一个适当的解决方案来解决这个恼人的问题,即使我按照规则手册玩,它似乎也会发生。

根据你的描述,我将尝试对可能发生的事情进行有根据的猜测

Git 拒绝将您的 rebased 提交推送到上游分支 (origin/MyBranch),因为它们 与已经存在的提交哈希 不同那里。它们是不同的,因为您 将本地提交重新定位在与上游分支中不同的提交 之上。

问题

我认为您的情况可能是这样的:

      Local                                Origin
A---B---C---F (master)                A---B---C---F (master)
            \                                 \
             D'---E' (MyBranch)                D---E (MyBranch)
  1. origin/MyBranch 中的提交 DE 最初是基于 master 中的 C。然后F成为master的新HEAD
  2. 当您在 master 中执行 git pull 时,您在本地仓库中获得了新提交 F
  3. 您将 MyBranch 重新定位在 master 之上,现在是 F,这将 DE 的提交哈希更改为 D'E'.
  4. 发布 git push origin MyBranch 拒绝覆盖提交,因为 Git 将它们视为与 origin 中的 不同的提交 ,它们仍然是基于 C.

(可能的)解决方案

如果你是唯一一个在 MyBranch 工作的人,或者你可以轻松地与 任何可能有兴趣在该分支工作的人 交流,我说只需强制推送您重新提交的提交即可。同样,假设在此期间没有其他人将提交推送到 origin/MyBranch,您将不会丢失任何东西。

如果这根本不能反映您的情况,请随时忽略此建议,如果可能,请添加有关该问题的更多详细信息。