【问题标题】:Git: how do you merge with remote repo?Git:你如何与远程仓库合并?
【发布时间】:2010-03-31 02:58:36
【问题描述】:

请帮助我了解 git 的工作原理。

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

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

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

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

我了解我收到错误消息的原因。如何将我的更改合并到远程仓库?我需要先拉取远程仓库吗?

【问题讨论】:

标签: git


【解决方案1】:

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


  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 \ / \ - 一种 - / 以防万一这个 ASCII 艺术被破坏:提交 C 的表单,两个分支合并为提交 M。

    现在推送会快进

  4. 从机器 B 推送到远程仓库后

    • ''远程仓库''

      *---*---*---C---B----M \ / \ - 一种 - /
    • ''机器A''

      *---*---*---C---A
    • ''机器B''

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

    • ''远程存储库''
      ''机器 A''
      ''机器 B''
      *---*---*---C---B----M
                  \ /
                   \ - 一种 - /
      

HTH

【讨论】:

  • 插图确实帮助我清楚地了解发生了什么。谢谢!
【解决方案2】:

是的。

合并只在拉取时发生;推送将执行快进(除非你强制它,但这会失去工作)。拉取并成功合并后,推送将是快进。

git-push 有一些漂亮的插图。

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2016-11-12
    • 2017-04-15
    • 2014-11-21
    相关资源
    最近更新 更多