请问有没有一个简单的例子,说明当Git推送到中央仓库时快进合并失败会导致什么情况?为了出现这种情况,本地仓库和中央仓库的状态需要如何呈现?我真的很难想象...
请问有没有一个简单的例子,说明当Git推送到中央仓库时快进合并失败会导致什么情况?为了出现这种情况,本地仓库和中央仓库的状态需要如何呈现?我真的很难想象...
! [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.
git push
不执行真正的合并。它只执行“快进”,其中新的主分支具有旧的主分支作为祖先。因此,Bob 因为试图推送需要真正合并而不是快进的内容而出现错误。他需要将他的更改(提交 #4)与爱丽丝的更改(提交 #3)合并,创建一个新的提交,该提交具有这两个提交作为祖先:
可以使用两个命令(git fetch
和git merge
)或一个命令(git pull
)完成获取和合并操作。
现在Bob可以成功推送,因为中央代码库看到新主分支的祖先是旧的主分支。
注意现在Alice缺少Bob的提交记录。如果她在从中央仓库拉取之前向她的仓库进行更多提交并尝试推送,她将收到非快进错误,并且她必须获取和合并以解决它,就像Bob一样。只需在中央存储库的相同分支上进行提交,而无需将其拉到本地存储库。然后在本地进行提交并尝试推送。