First, 不要使用git pull
。这个命令是never需要的,如果你避免使用它,直到你成为 Git 大师,你会过得更好。但如果你坚持使用它,因为它很方便——而且is方便——记住它只是运行git fetch
首先,然后,根据各种情况,通常会运行git merge
second.
这是正确的吗git pull
在分支机构运营?
是的——但最好想想git pull
作为跑步twoGit 命令,因为这就是git pull
does.
在存储库中,运行时git pull
在不同的分支上,它会做不同的事情吗?
目前尚不清楚“在不同的分支上”和“做不同的事情”是什么意思。你可能的意思是:
git checkout branch1; git pull; git checkout branch2; git pull
or:
git checkout branch1; git pull origin branch2 branch3
后者是very不同的。 (“何时使用此表格”的简短答案是never。长的答案是“还没有:首先了解 octopus 合并,然后重新阅读文档。然后,一旦您成为 Git 大师,您就会意识到您可能永远不应该直接使用 octopus 合并git pull
无论如何,但至少现在你知道什么时候可以安全使用git pull
完全没有。”)
前者——跑步git pull
开启时branch1
,然后运行git pull
再次开启时branch2
—只需执行下面列出的四个步骤两次,一次即可branch1
,然后再次branch2
.
当之后不指定任何参数时git pull
,
- 它是否只从远程的同名分支拉到当前分支
origin
?
- 它对其他分支有什么作用吗?
让我们先处理第二部分,因为这很简单:“不,只要你不谈论远程跟踪分支."
接下来,我们需要注意一个假设:远程名称为origin
。你可以拥有多个遥控器,如果你这样做,显然最多其中一个被命名origin
。即使您只有一个遥控器,您也可以随意命名它。所以遥控器的想法是origin
一开始有点不稳定。
(不过,通常情况下,它is origin
。大多数人只有一个遥控器,它的名字是origin
,所以只有the遥控器,而不是“可供选择的七个不同遥控器之一”或其他什么。)
当你跑步时git pull
如果没有参数,Git 将:
-
识别当前分支upstream。例如,上游branch1
可能是origin/branch1
。请注意,该上游有两个部分:
- 遥控器的名称,例如
origin
.
- 分行名称在遥控器上找到, 例如
branch1
.
做一个远程跟踪分支,Git 有效地将这两部分粘贴在一起,这就是为什么我们将其视为origin/branch1
。但仍然有两个部分。
不要求上游分支名称match当地分支机构名称。这只是一个好主意.
(有时,当您有两个或更多遥控器时,您必须违反这个“好主意”。例如,假设该遥控器fred
有一个名为develop
和不同的遥控器susan
有一个名为develop
。你现在两者都拥有fred/develop
and susan/develop
in your存储库。你想对这两者做点什么;您将使用什么分支名称?也许你可以打电话给一个fred-develop
和另一个susan-develop
。但现在上游名称不再与本地名称匹配:上游为fred-develop
is fred/develop
, not fred/fred-develop
.)
将此上游分为两部分:远程部分和分支名称正如在遥控器上看到的.
-
Run git fetch
有几个论点。这git fetch
步骤将使用远程 URL 调用另一个 Git。一旦您的 Git 在网络电话上拥有了外部 Git,您的 Git 将获得它们所拥有的任何新提交their分支,你还没有任何地方。
假设当前分支是branch1
上游是origin/branch1
。如果你自己的 Git 不是太旧(至少是 1.8.4 版本),这会更新你的origin/branch1
。 (如果你的 Git 比这个旧,那么参数git pull
提供防止您的远程跟踪分支被更新。这不是一个好的情况,你应该更新你的 Git 版本。这一切works,这很难解释。如果你避免git pull
完全地,Git 1.8.3 及更早版本的奇怪方式不再重要,因为git fetch origin
更新all你的远程跟踪分支,即使是在这些古老版本的 Git 中。)
现在git fetch
有那些新的提交your存储库,在你的origin/branch1
远程跟踪分支,一切就绪。后来的一个git fetch
很快就会完成,因为你现在have那些新的提交。
Run git merge
, 或其他一些 Git 命令,有几个参数。
这是最后一步——通常git merge
——这会影响your分支。什么时候git merge
成功了,经常进行新的提交。与所有普通的 Git 命令一样,创建一个new commit 将提交添加到当前分支。 When git merge
进行快进而不是进行新的提交,also影响您当前的分支。
因此,我们可以这样说:When git pull
runs git merge
, the git merge
步骤影响您当前的分支的方式与git merge
always影响您当前的分支。
You can ask git pull
to run a different second command, though. Specifically, you can set things up so that git pull
runs git rebase
instead of git merge
. To figure out what that does, we must look at what git rebase
does, and that's more complicated—but in the end, it also affects your current branch, just like git merge
.1 Hence we can also say: When git pull
runs git rebase
, the git rebase
step affects your current branch in the same way that git rebase
always1 affects your current branch.
把这一切放在一起
当我们把所有这些事实放在一起时,我们最终会看到git pull
's second命令影响当前分支。并且,它only影响当前分支,因为git merge
and git rebase
work only在当前分支上。
(The first命令——git fetch
步骤—影响远程跟踪分支。但由于这些只是 Git 记住从外部 Git 获取内容的方式,因此上次从外部 Git 获取内容的时间并不重要。)
Last, 不要使用git pull
. Use git fetch
,后跟您根据 中的内容选择的命令fetch
: git merge
or git rebase
.
1There is a way to make git rebase
affect a different branch, but—fortunately—git pull
doesn't use it. (You probably shouldn't either, unless you know what you are doing. It is pretty trivial: it literally just does a git checkout
of another branch-name first, then proceeds as if you had done this yourself, and had not specified the extra branch-name.)