git pull是否在当前分支上运行?

时间:2017-04-21 17:53:35

标签: git

git pull在分支机构上运作是否正确?

在存储库中,当在不同分支上运行git pull时,它会做不同的事情吗?

git pull之后没有指定任何参数时,

  • 是否仅从远程origin中的同名分支拉到当前分支?
  • 它是否为任何其他分支做任何事情?

感谢。

2 个答案:

答案 0 :(得分:3)

首先,不要使用git pull 。这个命令永远不需要,如果你在Git-master之前避免它,你会更好。但是如果你坚持使用它,因为它很方便 - 并且 方便 - 请记住它首先运行git fetch,然后,根据各种事情,通常会运行git merge秒。

  

git pull在分支机构上运作是否正确?

是的 - 但最好将git pull视为正在运行两个 Git命令,因为这是git pull 所做的事情< / em>的

  

在存储库中,当在不同分支上运行git pull时,它会做不同的事情吗?

不清楚你在不同的分支上的意思&#34;&#34;和&#34;做不同的事情&#34;。你可能意思是:

git checkout branch1; git pull; git checkout branch2; git pull

或:

git checkout branch1; git pull origin branch2 branch3

而后者非常不同。 (#34的简短回答;何时使用此表格&#34; 从不。长答案是&#34;尚未:首先了解章鱼合并,然后重新阅读文档然后,一旦你成为Git大师,你就会意识到你可能永远不应该直接与git pull进行章鱼合并,但至少现在你知道什么时候可以安全使用{{1}在所有。&#34;)

git pull上的前git pull,然后在branch1上再次运行git pull - 只需执行下面列出的四个步骤两次,一次点击branch2 1}},然后又在branch1上。

  

branch2之后没有指定任何参数时,

     
      
  • 是否仅从远程git pull中的同名分支拉到当前分支?
  •   
  • 它是否为任何其他分支做任何事情?
  •   

让我们首先处理第二部分,因为这很容易:&#34;不,只要你不是在谈论远程跟踪分支。 #34;

接下来,我们需要注意一个假设:远程名称为origin。您可以拥有多个遥控器,如果这样做,显然最多其中一个被命名为origin。即使您只有一个遥控器,也可以随意调用它。因此,遥控器origin的想法开始时有点不稳定。

(通常情况下,它 origin。大多数人只有一个遥控器,它的名字为origin,所以只有#{}} 遥控器,而不是&#34;七种不同遥控器中的一种,可以选择&#34;或其他什么。)

当你在没有参数的情况下运行origin时,Git会:

  1. 识别当前分支的上游。例如,git pull的上游可能是branch1。请注意,此上游有两个部分:

    • 遥控器的名称,例如origin/branch1
    • 远程上找到的分支的名称,例如origin

    要制作远程跟踪分支,Git会有效地将这两个部分粘贴在一起,这就是我们将其视为branch1的原因。但仍有两部分。

    不要求上游分支名称​​匹配本地分支名称。它只是一个好主意

    (有时你必须违反这个&#34;好主意&#34;,当你有两个或更多遥控器时。例如,假设远程origin/branch1有一个名为{{1}的分支并且不同的远程fred有一个名为develop的分支。您现在在 存储库中有susandevelop。您想要做某事使用这两个;你会使用哪些分支名称?也许你可以调用一个fred/develop而另一个susan/develop。但是现在上游名称不再与本地名称匹配:上游fred-developsusan-develop,而不是fred-develop。)

  2. 将上游分为两部分:远程和分支名称​​,如远程所示。

  3. 使用多个参数运行fred/developfred/fred-develop步骤将使用远程URL调用另一个Git。一旦你的Git在互联网手机上拥有外国Git,你的Git将获得他们在他们的分支上的任何新提交,你还没有任何地方。

    我们假设当前分支为git fetch,上游为git fetch。如果你自己的Git不是太古老(至少是版本1.8.4),这会更新你的branch1。 (如果您的Git比这个早,那么origin/branch1提供的参数会阻止您的远程跟踪分支更新。这不是一个好的情况,您应该更新您的Git版本。所有工作,这很难解释。如果你完全避免使用origin/branch1,Git 1.8.3及更早版本的奇怪方式不再重要,因为git pull更新所有您的远程跟踪分支,即使在这些古老版本的Git中。)

    既然git pull您的存储库中有这些新提交,在您的git fetch origin 远程跟踪分支下,您就是全部组。稍后git fetch将很快完成,因为您现在这些新提交。

  4. 使用多个参数运行origin/branch1或其他一些Git命令

  5. 最后一步 - 通常git fetch - 会影响您的分支。当git merge成功时,通常会进行新的提交。与所有普通的Git命令一样,使 new commit 将提交添加到当前分支。git merge执行快进而不是进行新提交时,影响你当前的分支。

    因此,我们可以这样说:git merge运行git merge时,git pull步骤会影响您当前的分支,就像git merge 一样总是会影响您当前的分支。

    但是,您可以要求git merge运行不同的第二个命令。具体来说,您可以进行设置,以便git merge运行git pull而不是git pull。为了弄清楚它的作用,我们必须看看git rebase做了什么,而且更复杂 - 但最后,它也会影响你当前的分支,就像git merge一样。 1 因此我们也可以说:git rebase运行git merge时,git pull步骤会影响您当前的分支,方式与git rebase <相同strong>始终 1 会影响您当前的分支。

    把这一切放在一起

    当我们将所有这些事实放在一起时,我们最终会看到git rebase 第二命令影响当前分支。并且,影响当前分支,因为git rebasegit pull仅在当前分支上

    第一个命令 - git merge步骤影响远程跟踪分支。但是因为这些只是你Git的记忆方式从外国Git获得的东西,最后一次从外国Git获得的东西,这不是很重要。)

    最后,不要使用git rebase 。使用git fetch,然后根据git pullgit fetchfetch的内容选择您选择的任何一个命令。

    1 有一种方法可以让git merge影响另一个分支,但幸运的是,git rebase并没有使用它。 (你可能也不应该,除非你知道你在做什么。这是非常微不足道的:它首先只是另一个分支名git rebase,然后就好像你自己这样做了,并且没有指定额外的分支名称。)

答案 1 :(得分:2)

如果您从分支机构执行git pull,它将仅提取提交给该分支的新更改。因此,例如,如果我也在对您的分支进行更改并将新的更改推送到repo。你可以从你的分支机构进行git pull,它会随着我的更改而更新。