当我需要将它合并到另一个分支时,有必要拉远程分支吗?

时间:2018-01-03 18:43:19

标签: git merge

我在本地拥有master分支。我想合并仅存在于远程的feature1分支。将它合并到我的master分支的最快方法是什么?当我在master并尝试git merge origin/feature1时,其回报“已经是最新的”。

有什么比这更快/更好的方法吗?

git checkout feature1
git pull
git checkout master
git merge feature1
git branch -d feature1

1 个答案:

答案 0 :(得分:2)

如果您是Git中的初学者(甚至是某种中间人),我建议您完全避免 git pull。 (git pull对我来说做了什么,作为Git早在2008年的初学者,大部分都让我感到困惑。:-)现在比以前更好,但它还不是那么好。)< / p>

git pull的作用是:

  1. 运行git fetch(带有一些选项/参数)。
  2. 如果成功,请运行第二个Git命令(带有一些参数)。
  3. 您可以选择运行哪个Git命令。默认值为git merge,但另一个正常且有用的第二个命令是git rebase。这个正在运行的git pullgit pull --rebase - 比必须运行两个单独的命令更方便。

    但是:你怎么知道你应该使用哪个第二命令?嗯,这取决于不止一件事 - 但它所依赖的事情之一是由git fetch取得的东西。但git pull会让您在运行git fetch之前决定,从而了解git fetch取得的内容!因此,随着便利性的发展,git pull存在一些缺陷。

    我推荐什么

    git fetch origin
    git merge origin/feature1
    

    特别是,如果您希望在运行git fetch时看到进入,您需要在运行git fetch后让Git 停止 。然后,您可以运行git log origin/feature1来查看它。然后,您可以运行git merge origin/feature1,如果这仍然是您想要做的。也许你不想做 两个标准的第二步,或者至少,还没有。您将清楚地了解这两个步骤,并在跳到第二步之前查看选项。

    组合的方便&#34; git pull

    如果您确定要使用git merge,可以使用便捷模式合并这两个步骤:

    git pull origin feature1
    

    步骤是什么,以及他们做了什么

    使用git pull将运行以下两个命令:

    1. git fetch origin feature1

      这会将你的Git连接到另一个Git。另一个Git是通过以origin的名称调用(以某种方式发短信,打电话,上网)可以访问的网址。 Git将此名称称为远程

      另一个Git有一些分支(分支名称,更准确)。其中一个分支大概是feature1。你的Git问他们的Git名称feature1标识了什么。你的Git会根据你的问题检查你是否已经有了这个提交 - 如果不是,那就要求他们的Git提交该提交,以及提交的父母和父母的父母,等等,直到这个父提交链导致你的Git 已经拥有的提交。

      然后,您的Git会将所有这些提交存储在您自己的存储库中。如果您的Git不是太古老(至少是1.8.2),那么您的Git会通过更新您的远程跟踪名称 feature1来记住他们的Git origin/feature1 。这是他们的分支名称,但它不是您的分支,因此您的Git 重命名为其中一个远程跟踪名称。

      您的Git还会将提交哈希ID存储在特殊文件.git/FETCH_HEAD中。甚至在我开始使用的古老的Git版本中也会发生这种情况。这个存储是暂时的(它会被您运行的下一个git fetch覆盖或者已经为您运行),这就是为什么有更永久,更好的origin/feature1到记住你的哈希ID。

      如果你跑:

      git fetch origin
      

      没有feature1限制,你的Git仍然像以前一样调用他们的Git,但这次它检索所有他们的分支,并更新或创建所有相应的远程跟踪名称。我建议这样做,即使它可能带来一些你不需要的东西,因为如果这些提交存在名字&#34;那边&#34;那样你就可以把它们与你一起拥有远程跟踪名称&#34;在这里&#34;在您自己的Git存储库中,您可以在其中看到它们。

    2. git merge -m "merge branch 'feature1' of url" hash-ID

      此步骤合并其feature1 - 您的origin/feature1 - 名称的特定提交。这就是Git的合并无论如何都是如此(通过提交哈希ID)。它设置合并消息,使其不具有原始哈希ID。

      如果你自己运行:

      git merge origin/feature1
      

      默认的合并消息将是merge branch origin/feature1,这实际上同样有用。两者都不是一个很好的提交消息。好的人可能会读到:

        

      合并功能X的实现

           

      新功能X使得等等......简短   描述了它的全部内容   营销人员将变成销售高峰期

      但几乎没有人愿意写出好的合并消息。

    3. 请注意,git merge步骤可能存在合并冲突。由于合并是通过下面的提交哈希来实现的,因此启动合并的方式并不重要:它会产生相同的冲突,您将以相同的方式解决冲突。