git推送失败,没有冲突

git推送失败,没有冲突,git,Git,我已经阅读了一些关于git推送失败的解释,但似乎没有一个能涵盖这个案例 我无法将我的本地更改推送到远程存储库,即使在拉取之后并且没有冲突 $ 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 (n

我已经阅读了一些关于git推送失败的解释,但似乎没有一个能涵盖这个案例

我无法将我的本地更改推送到远程存储库,即使在拉取之后并且没有冲突

$ 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.
$git pull
已经更新
$git街
#关于分支不稳定
没有要提交的内容(工作目录清理)
$git推送
要使用ssh,请执行以下操作://
! [已拒绝]主机->主机(非快进)
错误:无法将某些引用推送到“ssh://”
为防止丢失历史记录,拒绝了非快进更新
在再次按下之前,合并远程更改(例如“git pull”)。见
有关详细信息,请参阅“git推送--帮助”的“关于快进的注意”部分。
当然是我的存储库的真实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.
$git remote-v
源ssh://(获取)
源ssh://(推送)
$git分行-v
现在必须从主线程以外的线程调用master 175a09d[behind 18]openReview。
*附件上的c9e5cab进度不稳定。
在过去,我刚刚删除了我的本地存储库。然而,这种情况发生得更频繁

  • 这是什么原因造成的
  • 我以后怎么才能避免呢
  • 我该怎么解决这个问题

  • 完全公开-我的git有点生锈,所以这可能不是100%正确


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

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

    要解决这个问题,就去做吧

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

    重要的一点是“非快进更新被拒绝”。通常情况下,Git只需将您的修订版复制到远程存储库,然后直接复制到最新的修订版。但是,如果您的历史记录不同(将其推到远程后,您在本地编辑了一个修订版),则它不能只是快进。

    我这些天也遇到了同样的问题,您正在尝试进行“非快进”更新。正如您在帮助中所读到的,键入
    git push--help
    并阅读“关于快进的说明”,您在本地启动了一个与您的repo中不同的历史记录。如果您确信您的本地分支机构是最新的,您可以使用
    git push--force
    强制推送,以覆盖您的本地回购。

    push--force
    应该是最后的手段。请参见@DanR的答案。+1,因为——武力是最后的手段。很少有情况下你会使用武力--强制对其他用户有严重的副作用。
    push--force
    应该是最后的手段。请看@DanR的答案,你是对的。问题是主分支,我没有意识到我必须先拉它。另外,这是否意味着
    git pull--all
    git push
    的真正对应物?