Bes*_*ces 6 git merge git-merge fast-forward
有人可以提供一个简单的例子,说明什么会导致Git推送到中央仓库失败,因为快进不会发生?为了让这种情况发生,本地回购与中央回购国的状态需要是什么样的呢?真的无法想象这个......
rob*_*off 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.
Run Code Online (Sandbox Code Playgroud)
以下是"非快进更新被拒绝"问题的发生方式.
让我们说Alice和Bob正在开展一个项目.它们每个都有一个存储库,并且它们都有一个中央存储库,它们都可以推送和拉出.最初,这三个存储库看起来像这样:

现在爱丽丝和鲍勃都做了一些工作.每个都对其本地存储库进行不同的更改:

接下来,Alice将她的更改推送到中央回购:

接下来,鲍勃试图推动.中央仓库的主分支指向提交3.Bob的推送尝试将其更新为指向提交4.由于提交4没有提交3作为祖先,因此需要合并,但git push不进行实际合并.它只做"快进",新主人将旧主人作为祖先.所以鲍勃得到了错误,因为他试图推动需要真正合并而不是快进的东西.
要成功推送,Bob必须首先从中央存储库获取新提交:

并且他必须将他的更改(提交#4)与Alice的更改(提交#3)合并,创建一个既提交为祖先的新提交:

获取和合并可以在两个命令(git fetch后跟git merge)或一个命令(git pull)中完成.
现在Bob可以成功推送,因为中央回购会看到新主人将旧主人作为祖先.

请注意,现在Alice失去了Bob的提交.如果她对她的回购做出更多承诺并试图在从中央仓库撤出之前推动,那么她将获得非快进错误,并且她将不得不取出并合并修复它,就像鲍勃那样.
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |