【发布时间】:2020-03-30 22:34:34
【问题描述】:
Pro Git book 的 git-pull 部分说“在其默认模式下,git pull 是 git fetch 后跟 git merge FETCH_HEAD 的简写。”
还有哪些其他模式,我在哪里可以找到它们的文档?
【问题讨论】:
Pro Git book 的 git-pull 部分说“在其默认模式下,git pull 是 git fetch 后跟 git merge FETCH_HEAD 的简写。”
还有哪些其他模式,我在哪里可以找到它们的文档?
【问题讨论】:
您链接的文档中描述了其他模式。
mode这个词的定义不是很好,所以它对不同的人有不同的含义。可能主要项目在这里伪装得很好,大约在页面下方的 1/4:
-r--rebase[=false|true|merges|preserve|interactive]如果为 true,则在获取后将当前分支重新定位到上游分支之上。如果存在与上游分支相对应的远程跟踪分支,并且上游分支自上次获取后被重新定位,则重新定位使用该信息来避免重新定位非本地更改。
当设置为
merges时,使用git rebase --rebase-merges进行rebase,以便本地合并提交包含在rebase 中(有关详细信息,请参阅git-rebase[1])。当设置为保留时,使用传递给
git rebase的--preserve-merges选项进行变基,这样本地创建的合并提交就不会被展平。当为false时,将当前分支合并到上游分支。
interactive时,开启rebase交互模式。如果您想让
git pull始终使用--rebase而不是合并,请参阅git-config[1] 中的pull.rebase、branch.<name>.rebase和branch.autoSetupRebase。注意
这是一种潜在的危险操作模式。它改写了历史,当您已经发布了该历史时,这并不是一个好兆头。除非您已仔细阅读 git-rebase[1]],否则请不要使用此选项。
但是,其他“模式”可能包括运行带有参数的git pull,例如git pull upstream branch-X。这运行git fetch upstream branch-X,然后运行git merge FETCH_HEAD,所以对我来说这似乎是相同的“模式”。
我个人建议不要使用git pull。运行git fetch,然后运行您自己的第二个命令。例如,我发现我经常想在两个命令之间运行git log ,而使用git pull 则不可能。在看到git fetch 获取的内容后,我可以选择git merge,或git rebase,或者两者都不选择。
【讨论】:
当为false时,将当前分支合并到上游分支。
警告:这是不正确的。
使用 Git 2.33(2021 年第三季度),文档修复了“git pull --rebase=no”(man)”。
参见Felipe Contreras (felipec)commit d3236be(2021 年 7 月 21 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit e9fe413,2021 年 8 月 2 日)
doc: pull: 修复 rebase=false 文档抄送:Stephen Haberman
签名人:Felipe Contreras
[jc:更新日志消息]
"
git pull --rebase=false"(man) 表示我们将他们的历史合并到我们的历史中,但它的描述正好相反。
git pull 现在包含在其man page 中:
当为false时,将上游分支合并到当前分支中。
(而不是:
为 false 时,将当前分支合并到上游分支。)
【讨论】: