git push failure没有冲突

时间:2011-11-30 17:26:27

标签: git

我已经阅读了一些关于git push破坏的解释,但是它们似乎都没有涵盖这种情况。

我无法将本地更改推送到远程存储库,即使在拉动并且没有冲突之后也是如此。

$ git pull
Already up-to-date

$ git st
# On branch unstable
nothing to commit (working directory clean)

$ git push
To ssh://<url>
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'ssh://<url>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

<url>当然是我的存储库的真实URL。

拉动没有变化,没有冲突,我不确定还有什么可能导致失败。

我相信我已经正确设置了所有内容:

$ git remote -v
origin  ssh://<url> (fetch)
origin  ssh://<url> (push)

$ git branch -v
  master   175a09d [behind 18] openReview must now be called from thread other than main.
* unstable c9e5cab Progress on attachments.

过去,我刚刚删除了我的本地存储库。但是,这种情况更频繁发生。

  1. 是什么导致了这种情况发生?
  2. 将来如何避免使用它?
  3. 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

完全披露 - 我的git有点生疏,所以这可能不是100%正确。

您的本地“主”分支似乎位于“origin”主分支的后面。当您运行'git push'时,它将尝试使用相应的本地分支更新所有远程分支。要推送当前分支,请尝试git push origin unstable。此外,如果您希望本地主分支机构获得最新信息,请检查主分支并运行git pull

答案 1 :(得分:1)

Git基本上抱怨你的本地历史与远程历史不同。如果您重新分支您的分支,或者通常会在推送之后执行修改已提交的修订的任何内容,就会发生这种情况。

要修复它,只需执行

git push -f #Warning, this will essentially clobber revisions on origin with your local revisions.

重要的是“非快进更新被拒绝了”。通常,Git可以将您的修订复制到远程存储库,并将HEAD升级到最新版本。但是,如果您的历史记录不同(您在将其推送到遥控器后在本地编辑了修订版),则不能只是快进。

答案 2 :(得分:0)

这些天我遇到了同样的问题,你正试图进行'非快进'更新。正如您可以在帮助键入git push --help并阅读'关于快进的说明'中阅读的那样,您在本地开始的历史记录与您的回购记录不同。如果您确定本地分支是最新的,则可以使用git push --force强制推送以覆盖您当地的远程仓库。