请帮助我了解git是如何工作的。
我在两台不同的机器上克隆我的远程存储库。
我在两台机器上编辑同一个文件。
我成功提交并将更新从第一台机器推送到远程存储库。然后我尝试在第二台机器上推送更新,但收到错误:
! [rejected] master -> master (non-fast-forward)
我明白为什么收到错误。如何将我的更改合并到远程仓库?我需要先拉遥控器吗?
答案 0 :(得分:5)
是的,在远程存储库拒绝推送为非快进之后,您需要从远程存储库中提取(这将进行合并,这意味着您可能需要解决合并冲突 - 不要忘记提交合并冲突在这种情况下的决议),然后再次推。
在机器A和B上进行更改后,您会遇到以下情况:
''远程存储库''
*---*---*---C
''机器A''
*---*---*---C---A
''机器B''
*---*---*---C---B
从机器A推送到远程存储库后,您有:
''远程存储库''
*---*---*---C---A
''机器A''
*---*---*---C---A
''机器B''
*---*---*---C---B从机器B推送将正确拒绝使用提交B“覆盖”提交A.
从机器B上的远程存储库中提取后,您有:
''远程存储库''
*---*---*---C
''机器A''
*---*---*---C---A
''机器B''
*---*---*---C---B----M \ / \--A--/以防这个ASCII艺术被破坏:来自提交C的形式,并且两个分支被合并为提交M.
现在推动将是快进
从机器B推送到远程存储库
''远程存储库''
*---*---*---C---B----M \ / \--A--/
''机器A''
*---*---*---C---A
''机器B''
*---*---*---C---B----M \ / \--A--/
现在在机器A上,您需要在开始任何新工作之前从存储库中提取,以便保持最新状态。 Pull会快进,这意味着不会创建任何新的合并提交。现在所有三台机器都具有相同的存储库状态
*---*---*---C---B----M \ / \--A--/
HTH
答案 1 :(得分:2)