【问题标题】:What modes does git pull have other than the default?git pull 除了默认模式还有哪些模式?
【发布时间】:2020-03-30 22:34:34
【问题描述】:

Pro Git bookgit-pull 部分说“在其默认模式下,git pull 是 git fetch 后跟 git merge FETCH_HEAD 的简写。”

还有哪些其他模式,我在哪里可以找到它们的文档?

【问题讨论】:

    标签: git git-pull


    【解决方案1】:

    您链接的文档中描述了其他模式。

    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.rebasebranch.<name>.rebasebranch.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,或者两者都不选择。

    【讨论】:

      【解决方案2】:

      当为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 时,将当前分支合并到上游分支。)

      【讨论】:

        猜你喜欢
        • 2012-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        相关资源
        最近更新 更多