``git pull --rebase起源开发''与``git pull --rebase起源开发''之间的区别

问题描述

我找不到差异,但是会有差异吗? 之间:

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

Git docs状态:

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

所以您会认为选项B是正确的选项,但是比..

  • 为什么选项A也有效
  • 并且可能存在处理选项的顺序?

解决方法

关于选择与论据的放置应该有多严格的理论存在竞争。 POSIX utility guidelines规定了您所说的选项B。但是,即使有可选的或必需的位置参数,Git也会在选项放置方面保持相当的灵活性。

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

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

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

     GIT_DIR=<path> git ...
    

    做同样的事情。

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

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

  • 以连字符开头的任何内容都是可以选择的,在任何地方,除了双连字符之后的

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

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

<rev-list-options>本身可以具有选项,然后是第二个独立的双连字符--,然后是路径名。 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 使用这种能力,因为这是将枪对准自己的脚的一种形式。