有人可以提供一个简单的例子,说明什么会导致Git推送到中央仓库失败,因为快进不会发生?为了让这种情况发生,本地回购与中央回购国的状态需要是什么样的呢?真的无法想象这个......
答案 0 :(得分:11)
我认为你看到了这个问题:
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '/Users/mayoff/t/test/central'
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.
以下是“非快进更新被拒绝”的问题。
让我们说Alice和Bob正在开展一个项目。它们每个都有一个存储库,并且有一个中央存储库,它们都可以推送和拉出。最初,这三个存储库看起来像这样:
现在爱丽丝和鲍勃都做了一些工作。每个都对其本地存储库进行不同的更改:
接下来,Alice将她的更改推送到中央仓库:
接下来,鲍勃试图推动。中央仓库的主分支指向提交3.Bob的推送尝试将其更新为指向提交4.由于提交4没有提交3作为祖先,因此需要合并,但git push
不执行真正的合并。它只做“快进”,新主人将旧主人作为祖先。所以鲍勃得到了错误,因为他试图推动需要真正合并的东西,而不是快进。
要成功推送,Bob必须首先从中央存储库获取新提交:
他必须将他的更改(提交#4)与Alice的更改(提交#3)合并,创建一个既提交为祖先的新提交:
获取和合并可以通过两个命令(git fetch
后跟git merge
)或一个命令(git pull
)完成。
现在Bob可以成功推送,因为中央回购会看到新主人将旧主人作为祖先。
请注意,现在Alice失去了Bob的提交。如果她更多地提交她的回购并试图在从中央仓库撤出之前推送,那么她将获得非快进错误,她将不得不取出并合并修复它,就像鲍勃那样。 / p>
答案 1 :(得分:0)
只需在同一分支上的中央仓库上进行提交,而不必拉到本地仓库。然后在本地提交并尝试推送。