git fetch+;git合并原点/主控与git拉入原点/主控
我认为git pull就像git fetch+git合并。在branchA,我总是先进行git获取,然后进行git合并origin/master。但是今天,在branchA,我尝试了git-pull-origin/master,它不起作用,但使用git-pull-origin-master是有效的。有什么想法吗 另外一个问题,如果更新的源代码/母版和在线版本的母版是一样的,为什么还要麻烦使用源代码/母版,总是使用在线版本更新不是更方便吗,这样我们就不用一直使用git获取了 我认为git pull就像git fetch+git合并 是的。但是,我们使用的git fetch+;git合并原点/主控与git拉入原点/主控,git,git-merge,git-pull,git-fetch,Git,Git Merge,Git Pull,Git Fetch,我认为git pull就像git fetch+git合并。在branchA,我总是先进行git获取,然后进行git合并origin/master。但是今天,在branchA,我尝试了git-pull-origin/master,它不起作用,但使用git-pull-origin-master是有效的。有什么想法吗 另外一个问题,如果更新的源代码/母版和在线版本的母版是一样的,为什么还要麻烦使用源代码/母版,总是使用在线版本更新不是更方便吗,这样我们就不用一直使用git获取了 我认为git pull
git pull
语法与我们使用的几乎所有其他git命令的语法都不匹配。这是由于历史的原因:git pull
早于git在1.5之前和1.6之后版本之间所做的许多改进。(请注意,Git现在的版本是2.26,因此这确实是一段古老的历史,可以追溯到2005年左右。现在人们似乎仍然使用的最古老的Git版本是1.7版,但当您运行Git pull
,您就回到了石器时代之前的恐龙Git 1.5时代。)
[但是]我尝试了git-pull-origin/master
,但没有成功[而]git-pull-origin-master
成功了
这是因为这是git pull的特殊语法
仔细阅读异常(有很多异常),但一般来说,大多数传递给git pull
,git pull
的参数都传递给git fetch
。正如你不会跑步一样:
git fetch origin/master # wrong
你不能跑
git pull origin/master # also wrong: this runs git fetch origin/master
但是,您可以运行:
git fetch origin master
这里的origin
是遥控器,master
是refspec(有关遥控器和refspec的更多信息,请参阅)。这特别限制了您的git fetch
操作,仅获取其master
上新提交给您的内容,以便仅更新您的origin/master
。1
获取完成后,pull
在某组分支头提交上运行merge
,或者如果您这样指定,rebase
。2这里的总体思路可以追溯到我提到的Git-1.6之前的历史,即从其他Git获取一些提交,您现在希望将这些提交合并到当前分支中
在早期的Git中,曾经有一段时间,远程的整个概念都不存在,因此没有远程跟踪名称:根本没有origin
,因此没有origin/master
。因此,立即合并他们的提交非常重要,以免Git运行垃圾收集过程并删除您获得的新提交
在后1.6时代,也就是说,从2006年左右开始,收集提交并让它们在那里停留一段时间是安全的,而您可以仔细查看、思考它们,甚至完全忽略它们一段时间。远程名称origin
引入了远程跟踪名称,例如origin/master
,它无限期地保留这些提交。现在不再需要疯狂地将这些承诺推到你们自己的一个分支上,以防止它们被移除
底线是:如果你觉得git pull很方便,就使用它。如果没有,就不要。请记住,如果使用参数,您将使用的参数对它来说是唯一的。
它只是git fetch
的组合,再加上立即执行的第二个命令,用于将一些获取的提交合并到当前分支中。大多数情况下,我觉得这很方便:我喜欢首先检查获取的提交如果不使用git-pull
,您将使用远程跟踪名称命名传入的提交,如origin/master
,但是如果使用git-pull
,则不能在git-pull
命令本身中使用这些名称,因为它与古代不存在这些名称时兼容。
1这种
git fetch
将在任何现代git中更新您的origin/master
,但在1.8.4之前的git版本中,它将保持origin/master
未更新
2选择作为合并或重基参数的提交来自于您在命令行中指定的引用(如果有)。否则,作为参数选择的(单个)提交是与当前分支的上游设置相对应的提交
在某些情况下,gitpull
运行的第二个命令不是merge或rebase。这些特殊情况中最有趣的是拉入一个完全空的存储库:在这里,git merge
和git rebase
都不会做任何事情,因此git pull
实际上只是运行git checkout
。这一特殊情况显然在任何给定的存储库中只发生一次
我认为git pull就像git fetch+git合并
是的。但是,我们使用的git pull
语法与我们使用的几乎所有其他git命令的语法都不匹配。这是由于历史的原因:git pull
早于git在1.5之前和1.6之后版本之间所做的许多改进。(请注意,Git现在的版本是2.26,因此这确实是一段古老的历史,可以追溯到2005年左右。现在人们似乎仍然使用的最古老的Git版本是1.7版,但当您运行Git pull
,您就回到了石器时代之前的恐龙Git 1.5时代。)
[但是]我尝试了git-pull-origin/master
,但没有成功[而]git-pull-origin-master
成功了
这是因为这是git pull的特殊语法
请仔细阅读例外情况(其中有很多),但一般来说,您传递给