git-pull和git-fetch如何协作(之前问题为:git-pull选项`-p`是什么意思?)

10
有时我在文章中看到命令:git pull -p
但是我在官方文档中没有找到相关信息。
那这个选项的含义是什么呢? 更新 正如@torek所指出的,-p选项被传递给git fetch。 这里的-p的意思是:

-p
--prune
在获取之前,删除远程不存在的任何远程跟踪引用。

但我不理解git-pull如何与git-fetch合作?
我怎样才能弄清楚哪些git选项会从一个命令传递到另一个命令?

1
git pull”命令本身没有“-p”选项。实际上,“-p”会被传递给“git fetch”。不确定是谁对此进行了投票:事实上,“-p”没有得到恰当的文档说明(在我看来,“git pull”本身就没有得到充分的文档说明,但“git pull”甚至不应该存在 :-) )。 - torek
@torek 或许那些认为 -p 代表 --patch 并标记此问题为重复的人们。 - Eugen Konkov
@KevinB 不是的,在你链接的那个问题中,-p 的意思是 --patch - Eugen Konkov
3个回答

7

git pull命令是一个简写命令,它被解释为“git fetch”和“git merge FETCH_HEAD”命令。如果您给pull命令添加-p标志,则实际上会运行带有命令的--prune命令“git fetch”。这将删除(修剪)本地存储库中不再存在于源上的所有远程跟踪分支。


哈,当我回答你的问题时,有人编辑了它。 :) 我希望我的回答仍然有助于澄清“pull”命令的两个部分对你来说? - JGTaylor
尽管格式不太好,但你的回答很有用。+1 ;-) - Eugen Konkov

4
也许现在应该是第二个问题了:
但我不明白git-pull如何与git-fetch合作? 我该如何找出哪些git选项会通过一个命令传递到另一个命令中?
(我想你的意思是"协作"1而不是“corporate”吧。) git pull命令曾经是一个shell脚本。在脚本中,很容易确定哪些选项传递给了git fetch,哪些传递给了git mergegit rebase,哪些被直接使用。
自Git 2.6.0版本起,pull命令已被重写为C语言。现在仍然可以区分哪些选项是哪些选项,但现在更难了,因为您必须向下查找以找到每个选项的文本拼写。(这个第二个链接可能会随着时间的推移而失效,因为它让GitHub查找源文件的当前版本,行号可能会改变。)
我个人建议避免使用git pull:运行git fetch,然后检查结果,然后根据需要选择git rebase(通常)或git merge(有时)。我还保留一个别名git mff,它扩展为git merge --ff-only,并且我倾向于运行git fetch && git mff:如果快进失败,则可能要进行变基,除非我想合并,而此序列(获取和合并如果快进可用)成功(在这种情况下,变基与合并无关紧要,我们完成了)或失败(在这种情况下,是时候进行检查了)。
(也许值得添加一个别名 git fff,它运行 git fetch && git mff... :-) )

1这个词可以写作“cooperate”,没有连字符,甚至可以写成“coöperate”,第二个o上方有一个分音符。在精美印刷的英文文本中,分音符很常见(The New Yorker仍然使用它!),但由于打字机无法产生它而在20世纪初到中期变得不那么常见。现在,由于计算机具有Unicode和umlauts(虽然从技术上讲是不同的,但在符号上是相同的),我认为我们应该恢复分音符的显赫地位。 :-)


别名在我的环境中因“流特性完成”而繁忙 :-D - Eugen Konkov

1

看起来答案在这里

git-pullgit-fetch 的相似之处:它们都用于从远程仓库下载新的数据。

  • git-fetch 只是从远程仓库下载新的数据
  • git-pull 不仅下载新的数据,还直接将新的数据整合到当前工作副本文件中(下载+合并)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接