【问题标题】:Once again: fast-forward error再次:快进错误
【发布时间】:2015-10-01 19:01:42
【问题描述】:

所以我针对 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 fast-forward


【解决方案1】:

根据您的描述,我将尝试对可能发生的事情做出有根据的猜测

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

问题

以下是我认为您的情况可能如下所示的示例:

      Local                                Origin
A---B---C---F (master)                A---B---C---F (master)
            \                                 \
             D'---E' (MyBranch)                D---E (MyBranch)
  1. origin/MyBranch 中的提交DE 最初基于来自masterC。然后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,您不会丢失任何东西。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 2014-08-21
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多