git reset -q是否可以等同于某些不带-q的git reset命令?

时间:2019-01-16 20:18:05

标签: git

git reset的手册页上说

git reset [-q] [<tree-ish>] [--] <paths>…
     

此表单将所有<paths>的索引条目重置为它们在以下位置的状态   <tree-ish>。 (它不会影响工作树或当前   分支。)这意味着git reset <paths>git add <paths>相反。

我认为上述命令形式需要-q。但是[-q]意味着-q是可选的吗?如果是,则与以下命令有什么区别?

git reset [<mode>] [<commit>]
     

此表单将当前分支头重置为<commit>,并且可能   更新索引(将其重置为<commit>的树),然后   工作树取决于<mode>。如果省略<mode>,   默认为--mixed

第一个格式git reset -q HEAD [--] <paths>…

git reset mixed HEAD [--] <paths>…

请注意,我相信可以在git reset [<mode>] [<commit>]的末尾加上[--] <paths>...,因为它显示在以下命令的输出中:

$ git rm feature2file 
rm 'feature2file'
$ git status
On branch feature2
Your branch is ahead of 'origin/feature2' by 2 commits.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    feature2file

谢谢。

1 个答案:

答案 0 :(得分:1)

-q标志是可选的,并且由非空的<paths>...部分隐含。例如:

git reset HEAD feature2file

有一个<path>参数,即feature2file,因此这意味着-q标志。

  

...与... git reset [<mode>] [<commit>]

有什么区别

缺少任何<path>参数的命令将调用git reset的另一种操作模式。

有些人(包括我自己)认为这些应该一直是两个不同的前端Git命令,以减少混乱的可能性。但事实并非如此,因此我们陷入了这种困惑。

  

第一个格式git reset [-q] [<tree-ish>] [--] <paths>…是否与git reset --mixed HEAD [--] <paths>…相同?

(我将您未破折号的mixed固定为读取--mixed)。 如果允许后者。至少在正式情况下是不允许的,但是:

$ git reset --mixed HEAD -- Makefile
warning: --mixed with paths is deprecated; use 'git reset -- <paths>' instead.

请注意,排除了--hard--soft

$ git reset --soft HEAD -- Makefile
fatal: Cannot do soft reset with paths.
$ git reset --hard HEAD -- Makefile
fatal: Cannot do hard reset with paths.

--mixed的情况下(如果省略了[<mode>],这是默认情况,而[<commit>]是可选的并且默认为HEAD),意味着:

git reset hello

模棱两可:

  • 它是否适合git reset [<mode>] [<commit>]模式,其中省略了mode(默认为--mixed),并且hello通过以下六步规则转换为提交: gitrevisions文档?是的,显然很适合该模式。
  • 它是否适合git reset [-q] [<tree-ish>] [--] <files>...模式,其中省略了<tree-ish>并且<files>是文件名hello?是的,它显然也符合那个模式。

git reset使用哪个?答案是:对其进行编码,可以同时尝试两种方法,并且如果两种方法都适用,则产生错误消息:

fatal: ambiguous argument 'wt-status.c': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

如果针对不同的操作模式使用单独的命令,则不会出现此问题。