在开始之前,我知道git pull
和git fetch
之间的区别。
但是,我想一次拉出每个分支,并且我了解到存在一个命令git pull --all
,但是它并没有达到目的,因为它获取所有分支,但只合并了我自己的那个分支使用它的远程功能(其他this等stackoverflow帖子向我保证了这一点。)
man git-pull
上的文档引用了git fetch
命令,并且在--all
部分中说
Options related to fetching
--all
Fetch all remotes.
那么,我的问题是热的。
由于git pull --all
的名称具有误导性,因此存在意义吗?
由于man git-fetch
与git pull --all
不同,以一种也会引起误解的方式引用git fetch --all
是否有意义?
(我知道这个问题听起来似乎主要是基于意见的问题,但是也许您可以从中了解到我现在还没有的这些git命令。其他人可能也没有。
( em>)答案 0 :(得分:3)
这可能是因为git pull
必然涉及git fetch
操作。 git fetch
有一个--all
标志,因此我们在--all
上也有一个git pull
标志,因此git pull
可以将相同的标志传递给{{1 }}(这绝对是必须要做的)。
是的,名称可能有所不同,并且可能避免混淆,但是例如,让git fetch
带有一个名为git pull
的标志同样令人困惑,该标志最终像--all-remotes
的{{1}}选项。也许如果他们也将--all
上的fetch
选项也更改为--all
的话,它就会奏效-但您可能会建议对API进行重大更改,以使清晰度有所改善,这通常是个坏主意。
旁注:据我所知,没有内置命令可以立即更新所有分支。 Hub拥有sync
,将做到这一点,但除此之外,我的研究似乎表明,最好的选择是使用自己的别名或函数来检出所有分支一对一。
答案 1 :(得分:1)
原始的git pull
是一个shell脚本,它:
git fetch
,然后是第二个,通常是git merge
; 1 git fetch
。这样,如果要运行git fetch --all
,然后再运行pull
的第二个Git命令,则可以运行git pull --all
。这几乎很少有用,而对第二条命令来说根本没有用,对第二条命令来说根本没有用,实际上并没有什么意义。脚本很愚蠢,只是将所有内容传递了出去。
Git作者努力保持向后兼容性。因此,如果您可以在之前 git pull
做些毫无意义的事情以使其在Windows上快速运行,则重写必须支持您在 之前可以做的一切。 。因此,即使这样做没有任何意义,它也必须接受并继续使用--all
选项。
1 另一个明显的是git rebase
。但是,有很多棘手的情况,例如在新的,否则为空的存储库中运行git pull
时,因此在极少数情况下,git pull
必须使用另一个不同的第二条命令。脚本至少一次出错了,而我曾经以这种方式破坏了几天的工作。如果可以避免,我将不再使用git pull
。
(在空存储库的情况下,我们只想基于获取的结果创建当前分支。没有要合并或变基的内容,因此我们不能使用git merge
或{{1} }。但是如果有未跟踪的文件该怎么办呢?原始的git rebase
脚本将其销毁了。)