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
谢谢。
答案 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>...]'
如果针对不同的操作模式使用单独的命令,则不会出现此问题。