Git 签出和#x2B之间的差异;并拉

Git 签出和#x2B之间的差异;并拉,git,git-merge,Git,Git Merge,假设我的git回购有两个分支: 主人 试验 在我的本地回购协议中,我当前在Master上,我希望合并Test的更新版本 我要做的是: git checkout Test git pull git checkout Master git merge Test (第二行可能没用.) 据我所知,这一行: git pull origin Test (在第一个版本中,这是“git pull origin/Test”,这要感谢@Tim来修复它) 应该使我的主分支处于类似的状态(即,它将包括来自测试的更改

假设我的git回购有两个分支:

  • 主人
  • 试验
  • 在我的本地回购协议中,我当前在Master上,我希望合并Test的更新版本

    我要做的是:

    git checkout Test
    git pull
    git checkout Master
    git merge Test
    
    (第二行可能没用.)

    据我所知,这一行:

    git pull origin Test
    
    (在第一个版本中,这是“git pull origin/Test”,这要感谢@Tim来修复它)

    应该使我的主分支处于类似的状态(即,它将包括来自测试的更改)。 我知道pull等于fetch+merge,所以我现在有点困惑


    问题是:上述两种方法之间有什么区别?

    Master
    分支运行以下命令:

    git pull origin Test
    
    避免为了拉取而必须将分支更改为
    Test
    。这相当于:

    git fetch origin Test && git merge origin/Test
    
    但更重要的是,只有在合并可以通过快进完成的情况下,Git才会进行合并。如果不可能,那么您必须进行显式合并

    我可以提供以下工作流作为git pull origin Test的替代方案:

    # from Master
    git fetch origin
    git merge origin/Test
    

    上述两个班轮使用来自远程的最新更改更新本地跟踪分支
    原点/测试
    。然后,它将
    Test
    直接合并到
    Master
    分支中。请注意,我们不必将分支从
    Master
    切换;整个合并不需要执行
    git签出
    。Git将始终使用这种方法进行合并,即使这种合并会导致冲突。

    您可以从本地主分支运行“Git pull origin Test”吗?在这种情况下,会发生什么?@Desmond我根据你最近的编辑编辑了我的答案。我建议的方法没有改变。回答得很好。非常感谢。这相当于
    git-fetch-origin测试;git merge origin/Test
    -即,它使用更新的远程跟踪
    origin/Test
    参考。(在1.8.4之前的Git版本中,这种特定的
    Git fetch
    无法更新
    origin/Test
    ,因此您必须使用
    Git merge fetch\u HEAD
    ,但我们可以假设Git>=2.0,例如。)@torek谢谢,这是一个打字错误。我不知道2.0版能用。很高兴再次见到你。