Git:你如何与远程回购合并?

时间:2010-03-31 02:58:36

标签: git

请帮助我了解git是如何工作的。

我在两台不同的机器上克隆我的远程存储库。

我在两台机器上编辑同一个文件。

我成功提交并将更新从第一台机器推送到远程存储库。然后我尝试在第二台机器上推送更新,但收到错误:

! [rejected]        master -> master (non-fast-forward)

我明白为什么收到错误。如何将我的更改合并到远程仓库?我需要先拉遥控器吗?

2 个答案:

答案 0 :(得分:5)

是的,在远程存储库拒绝推送为非快进之后,您需要从远程存储库中提取(这将进行合并,这意味着您可能需要解决合并冲突 - 不要忘记提交合并冲突在这种情况下的决议),然后再次推。


  1. 在机器A和B上进行更改后,您会遇到以下情况:

    • ''远程存储库''

      *---*---*---C
      

    • ''机器A''

      *---*---*---C---A
      

    • ''机器B''

      *---*---*---C---B
      

  2. 从机器A推送到远程存储库后,您有:

    • ''远程存储库''

      *---*---*---C---A
      

    • ''机器A''

      *---*---*---C---A
      

    • ''机器B''

      *---*---*---C---B
      
      从机器B推送将正确拒绝使用提交B“覆盖”提交A.

  3. 从机器B上的远程存储库中提取后,您有:

    • ''远程存储库''

      *---*---*---C
      

    • ''机器A''

      *---*---*---C---A
      

    • ''机器B''

      *---*---*---C---B----M
                  \       /
                   \--A--/
      
      以防这个ASCII艺术被破坏:来自提交C的形式,并且两个分支被合并为提交M.

    现在推动将是快进

  4. 从机器B推送到远程存储库

    • ''远程存储库''

      *---*---*---C---B----M
                  \       /
                   \--A--/
      

    • ''机器A''

      *---*---*---C---A
      

    • ''机器B''

      *---*---*---C---B----M
                  \       /
                   \--A--/
      

  5. 现在在机器A上,您需要在开始任何新工作之前从存储库中提取,以便保持最新状态。 Pull会快进,这意味着不会创建任何新的合并提交。现在所有三台机器都具有相同的存储库状态

    • ''远程存储库'''''机器A'''''机器B''
      *---*---*---C---B----M
                  \       /
                   \--A--/
      
  6. HTH

答案 1 :(得分:2)

合并只发生在拉动;推送将执行快进(除非你强制它,但失去工作)。一旦你完成并成功合并,推动将是一个快进。

git-push有一些不错的插图。