git fetch+;git合并原点/主控与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 fetch+git合并。在branchA,我总是先进行git获取,然后进行git合并origin/master。但是今天,在branchA,我尝试了git-pull-origin/master,它不起作用,但使用git-pull-origin-master是有效的。有什么想法吗

另外一个问题,如果更新的源代码/母版和在线版本的母版是一样的,为什么还要麻烦使用源代码/母版,总是使用在线版本更新不是更方便吗,这样我们就不用一直使用git获取了

我认为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的特殊语法

仔细阅读异常(有很多异常),但一般来说,大多数传递给
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的特殊语法

请仔细阅读例外情况(其中有很多),但一般来说,您传递给