【问题标题】:Difference between 'git pull origin develop --rebase' and 'git pull --rebase origin develop''git pull origin develop --rebase' 和 'git pull --rebase origin develop' 之间的区别
【发布时间】:2021-02-05 06:19:37
【问题描述】:

我找不到区别,但有区别吗? 之间:

  • 选项A:git pull origin develop --rebase
  • 选项 B:git pull --rebase origin develop

Git docs 状态:

git pull [<options>] [<repository> [<refspec>…​]]

所以你会认为选项 B 是正确的,但不是..

  • 为什么选项 A 也有效
  • 是否有处理选项的顺序?

【问题讨论】:

  • AFAIK 没有区别。至于为什么,Git 的语法往往很松散,这就是原因。
  • 不,选项的位置在 git 中无关紧要。请注意某些命令中的--,因为它之后的所有内容都被视为文件路径。 git show --name-only abcd1234 -- path/to/file.txt 将不等同于 git show abcd1234 -- path/to/file.txt --name-only
  • @MRedant 否。如果您想防止意外错误,请首选选项 B,如文档中所述。这是大多数 unix 命令行工具之间的共享约定...
  • @MRedant 我对您的评论感到非常惊讶,因为我在第一条评论中没有提出 任何 答案或解决方案。我只是指出 no option 应该放在-- 之后,这是“过去的一切都是文件路径”的符号。在这里你在你的命令中使用--,对不起,如果我不知何故增加了混乱。另外,我不知道您为什么会认为我的评论会促使您选择所谓的“选项 A”。
  • @RomainValeri .. 很抱歉造成混乱。我指的是您的第一条评论中的“否”以及您提供的其他有趣的背景信息。

标签: git version-control git-branch rebase pull


【解决方案1】:

关于选项与论点的放置应该有多严格,存在相互竞争的理论。 POSIX utility guidelines 规定了您所谓的选项 B。然而,即使存在可选或必需的位置参数,Git 也会尝试非常灵活地放置选项。

以下是 Git 选项的一般规则:

  • 放置在 git 和子命令动词(例如git --no-replace-objects log)之间的选项由 Git 前端(git 程序本身)处理。前端将这些转换为环境变量设置,这意味着您始终可以设置一个环境变量。例如:

     git --git-dir=<path> ...
    

     GIT_DIR=<path> git ...
    

    做同样的事情。

    放置在之后子命令动词的选项由子命令处理。

  • 单字母选项,例如-v,前面有一个连字符,可以组合在一起。多字母选项(例如 --name-status)前面有一个双连字符。因此在git diff 中,有一个-c 选项(“组合差异”),但也有一个--cc 选项(“密集组合差异”); single-c 选项采用单破折号,double-c 选项采用双破折号。

  • 任何以连字符开头的都是一个选项,在任何地方,除了在双连字符之后。

git filter-branch 命令稍微违反了最后一条规则,因为它必须解析自己的选项,然后将一些选项传递给git rev-list。因此,使用 filter-branch,您可以运行:

git filter-branch <filter-options> -- <rev-list-options>

&lt;rev-list-options&gt; 本身可以有选项,然后是第二个独立的双连字符 --,然后是路径名。1

所有这些加起来就是您所说的选项 A。但请注意,如果您在编写命令时考虑到选项 B,它们都在选项 A 下工作

是否有处理选项的顺序?

过去,对于一些 Git 子命令,有些地方的顺序特别重要。现在已修复,但您会在 the git checkout-index documentation 中看到此评论:

标志的顺序曾经很重要,但现在不再重要了。

不过,一般来说,选项会按照它们出现的顺序进行处理,而且通常重复的选项会覆盖前一个选项。例如:

git --git-dir=/tmp --git-dir=.git status

使用 .git 作为 Git 目录,而不是 /tmp


1这里的可以,我的意思是身体上可以。你实际上不应该使用这种能力和git filter-branch,因为它是一种将枪对准你自己脚的形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 2017-12-07
    • 2020-10-20
    • 1970-01-01
    • 2011-02-22
    • 2020-08-24
    • 2014-10-15
    相关资源
    最近更新 更多