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