我试着推动我的(第一次!)git repo最初是这样的:
$ git push helloworld但我拿回了这个:
To git-smichaels@free5.projectlocker.com:helloworld.git
! [rejected] HEAD -> master (non-fast forward) error:
failed to push some refs to 'git-smichaels@free5.projectlocker.com:helloworld
git'所以我找到了关于“修改的提交”的another StackOverflow question,并尝试了那里的一个建议,但实际上并不知道它是否会对我有所帮助:
KaiserSosa@SMICHAELS /c/test/helloworld (master)
$ git push helloworld +master:master啊,真灵!
但我不知道为什么它解决了我的问题:
有没有人能解释一下为什么"git push helloworld“不行?
发布于 2009-09-25 06:19:09
您似乎已经在主分支中重写了您的历史记录(与您的提交关联的SHA-1)。
这意味着,您不能再以快进模式进行推送。
+master强制推送发生:
通过使用可选的前导+,您可以告诉git更新<dst>引用,即使更新不是快进。
注意:如果其他人已经克隆了您的存储库,这可能是不好的,因为他们将不再能够在没有冲突的情况下拉出您的主分支。
另请参阅此SO answer for more。
注意:如前所述,by Junio C. Hamano
有两种独立的安全机制:
git push --force“和/或通过使用以'+');receive.denynonfastworwards来覆盖。后者默认为"unsafe",但如果在存储库中激活了安全,则发送方的强制不会将其停用。我的意思是,双方都需要同意允许不安全的行为。
正如Git FAQ中提到的,一种可能的行动方案是:
出现这种情况的最可能的原因是,您需要首先从远程拉取。您可以通过先获取,然后检查日志来查看远程端有哪些更改。例如,
$ git fetch origin
$ git log master..origin/master将列出您的远程端没有的所有更改。
如果需要图形表示,请使用gitk --left-right master...origin/master。
左边的箭头是您想要推入的更改,右边的箭头是远程侧的更改。
其他解决方案(这就是您所做的):
$ git push origin +branchname这将强制更新。如果您没有权限,那么有时这将会起作用:
$ git push origin :branchname
$ git push origin +branchname,即首先远程删除分支(这通常是允许的),然后重新推送“新的”(或者可能是倒带的)分支。
请注意,如果您倒带分支,其他人可能会在拉动时遇到问题。
它们有可能会合并到它们获取的分支中,与您发布的新分支合并,有效地保留您试图删除的更改。
然而,只有他们的副本有糟糕的修订。出于这个原因,倒带分支被认为是温和的反社会。尽管如此,它通常是适当的。
https://stackoverflow.com/questions/1475665
复制相似问题