git pull在分支上运行是否正确?
在一个仓库中,git pull在不同的分支上运行时,会不会做不同的事情?
在 之后未指定任何参数时git pull,
origin?谢谢。
首先,不要使用git pull. 这个命令永远不需要,如果你在成为 Git 大师之前避免它,你会更好。但是,如果你坚持使用它,因为它很方便,而且它是方便的,记住,它只是运行git fetch,然后再根据不同的事情,通常运行git merge第二。
git pull在分支上运行是否正确?
是的,但最好还是想git pull为运行2个Git命令,因为这是git pull 不。
在一个仓库中,
git pull在不同的分支上运行时,会不会做不同的事情?
不清楚“在不同的分支上”和“做不同的事情”是什么意思。你的意思可能是:
git checkout branch1; git pull; git checkout branch2; git pull
Run Code Online (Sandbox Code Playgroud)
或者:
git checkout branch1; git pull origin branch2 branch3
Run Code Online (Sandbox Code Playgroud)
后者是非常不同的。(“何时使用这种形式”的简短回答是从不。长回答是“还没有:首先了解章鱼合并,然后重新阅读文档。然后,一旦你成为 Git 高手,你就会意识到你可能永远不应该直接与章鱼合并git pull,但至少现在你知道什么时候可以安全使用git pull了。”)
前者运行的git pull同时branch1,再运行git pull而再次branch2-只是经过下列两次,一次是在四个步骤branch1,然后再branch2。
在 之后未指定任何参数时
git pull,
- 它是否只从远程的同名分支拉到当前分支
origin?- 它对任何其他分支有什么作用吗?
让我们先处理第二部分,因为这很简单:“不,只要您不是在谈论远程跟踪分支。”
接下来,我们需要注意一个假设:遥控器名为origin。您可以拥有多个遥控器,如果有,显然其中最多一个名为origin。即使您只有一个遥控器,您也可以随心所欲地称呼它。因此,遥控器的想法origin开始时有点不稳定。
(通常,虽然,这是 origin大多数人只有一个遥控器,和它的命名origin,所以有唯一的遥控器,而不是“七个不同的遥控器之一,从挑选”或什么的。)
当你git pull不带参数运行时,Git 将:
识别当前分支的upstream。例如, 的上游branch1可能是origin/branch1。请注意,此上游有两个部分:
origin.branch1.
为了创建远程跟踪分支,Git 有效地将这两部分粘贴在一起,这就是为什么我们将其视为origin/branch1. 但仍然有两个部分。
不要求上游分支名称与本地分支名称匹配。这只是一个好主意。
(当您有两个或多个遥控器时,有时您必须违反这个“好主意”。例如,假设该遥控器fred有一个名为 的分支,develop而不同的遥控器susan有一个名为 的分支develop。您现在在您的存储库中同时拥有fred/develop和。你想对这两个做一些事情;你会使用什么分支名称?也许你可以调用一个和另一个。但现在上游名称不再与本地名称匹配:上游的名称是,而不是。)susan/developfred-developsusan-developfred-developfred/developfred/fred-develop
将此上游拆分为两部分:远程和在远程上看到的分支名称。
运行git fetch几个参数。该git fetch步骤将使用远程 URL 调用另一个 Git。一旦您的 Git 在互联网电话上拥有外部 Git,您的 Git 将获得他们在其分支上的任何新提交,而您在任何地方都没有。
假设当前分支是branch1,上游是origin/branch1。如果你自己的 Git 不是太古老(至少是 1.8.4 版),这会更新你的origin/branch1. (如果你的 Git 比这更旧,git pull提供的参数会阻止你的远程跟踪分支被更新。这不是一个好情况,你应该更新你的 Git 版本。一切正常,只是很难解释。如果你git pull完全避免了,Git 1.8.3 及更早版本的奇怪方式不再重要,因为git fetch origin更新你所有的远程跟踪分支,即使在这些古老的 Git 版本中也是如此。)
现在,git fetch在您的存储库中,在您的origin/branch1 远程跟踪分支下,这些新提交已准备就绪。稍后git fetch会很快完成,因为您现在有了这些新提交。
运行git merge,或其他一些Git的命令,用几个参数。
这是最后一步——通常git merge——会影响你的分支。如果git merge成功,它往往使一个新的提交。与所有普通 Git 命令一样,进行新提交会将提交添加到当前分支。 什么git merge时候进行快进而不是进行新的提交,这也会影响您当前的分支。
因此,我们可以这样说:当git pullrunning 时git merge,该git merge步骤会以git merge 始终影响当前分支的相同方式影响您的当前分支。
不过,您可以要求git pull运行不同的第二个命令。具体来说,您可以进行设置,以便git pull运行git rebase而不是git merge. 要弄清楚它做了什么,我们必须看看它做了什么,git rebase这更复杂——但最终,它也会影响你当前的分支,就像git merge. 1 因此我们也可以说:当git pullrunning 时git rebase,该git rebase步骤会以git rebase 始终1影响当前分支的相同方式影响您的当前分支。
当我们把所有这些事实在一起,我们最终看到的是git pull的第二个命令是什么影响了当前分支。并且,它只影响当前分支,因为git merge并且只在当前分支上git rebase工作。
(第一个命令git fetch——step——影响远程跟踪分支。但由于这些只是你的 Git 记住它从一个外国 Git 得到的东西的方式,它最后一次从那个外国 Git 得到东西,这不是很重要。)
最后,不要使用git pull. 使用git fetch,然后是您根据fetch:git merge或附带的内容选择的任何命令git rebase。
1有一种方法可以使git rebase影响不同的分支,但是——幸运的git pull是——没有使用它。(您可能也不应该这样做,除非您知道自己在做什么。这很简单:它实际上只是先执行git checkout另一个分支名称的 a,然后继续进行,就好像您自己完成了此操作,并且没有指定额外的分支-姓名。)
如果您从您的分支执行 git pull,它只会拉取提交到该分支的新更改。例如,如果我也在对您的分支进行更改并将新更改推送到存储库。你可以从你的分支做一个 git pull ,它会随着我的变化而更新。