git reset命令中的双破折号[--]选项是什么意思?

17

我看过这样的命令:

git reset e542 -- readme.txt

我理解这个命令将来自提交 e542 的文件 readme.txt 的内容放入索引中。但是,-- 选项是做什么的?

git reset 手册将其列为前两种形式的可选项,但我找不到它的含义。

git reset [-q] [<commit>] [--] <paths>…
git reset (--patch | -p) [<commit>] [--] [<paths>…]

2
顺便提一下:你会在许多其他命令行工具中找到这种“--”语法,例如“rm”,“cp”,“chmod”等。 - Jonas Schäfer
2
请参见 https://dev59.com/iXM_5IYBdhLWcg3w3nRs#1192194。 - VonC
@VonC - 谢谢。如果你不知道该找什么,很难找到。 - AngraX
@random由于这个问题是在“重置(reset)”而不是“检出(checkout)”的背景下,所以争论它是否重复是很难说服人的。也许我们只需要为Git这类情况制定一个规范问题,比如,“在Git中,双破折号后跟一个路径是什么意思?” - user456814
在 Git 的上下文中,-- checkout 和 reset 的重要性不如双破折号。但是这里也有答案,可以参考 https://dev59.com/P3E85IYBdhLWcg3w9odJ @cup - random
显示剩余2条评论
2个回答

23

--将分支名称与文件名称分开,以防止名称冲突(如果有相同名称的分支和文件)。如果没有歧义,则不需要使用--

正如Jonas Wielicki所提到的那样,这允许使用以-开头的文件名;否则,这些文件名会被解释为命令行选项。


6
另一个原因是:以“-”开头的文件名。 - Jonas Schäfer
谢谢。我想这可能是*nix命令中常用的模式。 - AngraX

0

我认为它只是将提交(可选参数)与路径列表分开。如果没有这个分隔符,就没有确定的方法来区分第一个参数是路径还是提交。


有些不准确。Git可以很好地完成这个任务。提交可以是分支名称、提交ID或其他类型的引用,所有这些都可以轻松检查(提交ID是十六进制值,其他类型的引用可以在.git下的某些目录中找到)。因此,如果第一个参数是提交,就有一种方法可以将其与路径区分开来,但仅当它是明确的时候。 - Jonas Schäfer
这就是我的意思,但我的回答没有恰当地表达出来。 - Andy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接