【问题标题】:Git - Merging BranchesGit - 合并分支
【发布时间】:2017-08-14 00:26:36
【问题描述】:

我正在阅读这个post,但有些东西我不知道是不是我弄错了。

假设我在 master 分支中,而另一个开发人员正在开发一个功能,他正在一个名为 newFeature 的单独分支中工作。

如果我在我的 master 分支中,并且我拉出 master 分支,然后是他的 newFeature 分支,它们会自动合并吗?我的意思是我不必这样做

$ git merge newFeature

相反,这些将是我的命令:

$ git checkout master #We move to master branch.
$ git pull origin master #We pull the master branch to sync.
$ git pull origin newFeature #We pull the newFeature branch.

由于我在 master 分支中,并且我正在拉另一个分支,它们会自动合并吗?

【问题讨论】:

    标签: git merge branch


    【解决方案1】:

    我建议完全避免使用pull 命令。它只为您运行两个命令:git fetch,简单、安全、直接;然后是另一个你应该(至少在概念上)根据获取结果选择的命令。但是您必须提前选择该命令,然后才能看到获取的结果。由于这个原因和其他原因,git pull 是一个糟糕的工具,就像电锯一样,一旦你加油就会自动启动,即使你还没有真正准备好使用它。当然,它似乎很方便,直到你锯掉一两根手指...... :-)

    也就是说,git pull 运行的第二个命令确实通常是git merge。 (您可以将其配置为运行git rebase,毕竟还有其他几种极端情况可能无法运行git merge。)它传递给git merge 的精确参数有点棘手,尤其是因为您可以传递给git pull 的一些标志是git fetch 的标志,而另一些是仅对git rebase 有意义的标志,还有一些标志在@987654332 中有用@你不能通过git pull:从另一个方面来说它不是一个很好的工具。

    因此,这三个命令的简单扩展并不完全相同,但足够接近:你正在运行:

    git checkout master
    git pull origin master
    git pull origin newFeature
    

    表示Git实际执行的五个命令是:

    git checkout master
    git fetch origin
    git merge origin/master
    git fetch origin
    git merge origin/newFeature
    

    (因为git pull 只运行了两个 Git 命令)。

    请注意,这些git fetch 命令之一可能毫无意义:没有理由快速连续获取两次。 git fetch 步骤获取在另一个 Git 上可用的任何新提交,您的 Git 将其称为 origingit merge-s 将更新后的 origin/masterorigin/newFeature 一次一个(这几乎可以肯定是您想要的)合并到您当前的分支中。

    【讨论】:

      【解决方案2】:

      正是你将newFeature的工作带到了它所在的分支,记住如果你不想把newFeature的所有工作都带过来,你也可以带上提交。

      【讨论】:

        【解决方案3】:

        我完全同意@torek。 要回答原始问题: 如果/当您只是 git pull 时,这两个分支不会自动合并。它对那个分支执行“合并”操作,但不会改变任何其他分支(例如 master)。

        【讨论】:

        • “关于那个分支”在这种情况下意味着“它将与其上游分支合并,这可能分别是 origin/master 和 origin/newFeature”。但是,您也可以指定要合并的分支,在这种情况下,“git pull origin newFeature”将从“newFeature”合并到签出的分支,即“master”。实际上,“git pull origin master”也“覆盖”了从远程提取的分支,但这很可能与上游分支相同。