繁体   English   中英

“git pull origin develop --rebase”和“git pull --rebase origin develop”之间的区别

[英]Difference between 'git pull origin develop --rebase' and 'git pull --rebase origin develop'

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

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

Git文档状态:

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

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

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

关于选项与论点的放置应该有多严格,存在相互竞争的理论。 POSIX 实用程序指南规定了您所说的选项 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>

并且<rev-list-options>本身可以有选项,然后是第二个独立的双连字符-- ,然后是路径名。 1

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

是否有处理选项的顺序?

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

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

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

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

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


1可以在这里,我的意思是身体能 您实际上不应该这种容量与git filter-branch因为它是一种将枪对准您自己脚的形式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM