Discuss / Git / 这里对`--`(double dash)的解读不够正确

这里对`--`(double dash)的解读不够正确

Topic source

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

原文上面的表述不够严谨,去掉 -- 使用 git checkout file 并不会变成切换分支,起到的效果仍然是,还原工作区的file文件内容。

解答 -- 是什么意思,不妨先看它的前世今生。

-- 的名称叫做double dash,是bash的内置命令,用来标记可选命令选项的结束。即在它后面的带 -- 的字符串,不被当做是一个命令选项。

More precisely, a double dash (--) is used in bash built-in commands and many other commands to signify the end of command options, after which only positional parameters are accepted.

举例: 在 grep 命令中 -V 原本是一个可选的命令参数(options),打印出 grep 命令的版本。

但结合--后,以下命令表示在 d1.txt 文件中查找 "-V" 字符串 grep -- -V d1.txt

Git 的一些命令中,借鉴了这种用法。使用 -- 去隔离开“树”与“路径”。

例如,你想还原 一个文件 path/to/file.txt,在Git中使用如下命令

git checkout path/to/file.txt

但是天杀的居然有一个文件名字就叫做 "master" 如果你套用上面的命令,想还原“master”文件

git checkout master

最终起的效果是变成切换到了master分支上。

正确的做法是使用 --,这样它后面的字符串不会当做“树”,而认为是文件路径。

git checkout -- master

受教了

denao_denao

#3 Created at ... [Delete] [Delete and Lock User]

学习了,mark

SunSapphire

#4 Created at ... [Delete] [Delete and Lock User]

受教了谢谢

涨潮lucky

#5 Created at ... [Delete] [Delete and Lock User]

但是天杀的居然有一个文件名字就叫做 "master"

哈哈,这句话把我忍不住笑了。谢谢大神,受教了!

其实可以理解为:git checkout这个命令执行前会进行判断,判断顺序为:branch->path; 这样会好理解些;

soloflower

#7 Created at ... [Delete] [Delete and Lock User]

假如想一次discard 100个改变的文件,git checkout -- file 怎么操作呢 ?有没有批量一次性地忽略掉当前工作区所有100个改变的文件的办法 ??

ipursuer

#8 Created at ... [Delete] [Delete and Lock User]

感谢大神,学习了


  • 1

Reply