问题描述
我找不到差异,但是会有差异吗? 之间:
- 选项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
使用这种能力,因为这是将枪对准自己的脚的一种形式。