在使用 Git 的过程中,取消工作目录里文件的修改,敲git status
命令时Git 会提示你使用:git checkout -- filename
命令去取消工作目录文件的修改,那这里面的--
表示什么意思呢?
--
后面带一个命令我们是能过理解的,比如git log --pretty=oneline
,但是--
后面什么也不带,到底表示啥意思呢?
其实--
是用来表示后面接的是个路径,以避免歧义,比如git checkout -- filename
,这里-- filename
表示filename
是个路径(文件或目录),而不是branch
或者tag
。当该仓库刚好有个 branch 或 tag 也叫 filename 的时候,不加--
,直接敲git checkout filename
,Git 就不知道是切换到 filename 这个branch还是拉取 filename 这个tag代码还是撤销工作目录中 filename 这个文件的修改。
另外,如果filename
文件已经从 Git 库里删掉了,而又想看它的历史,那么git log filename
是会报错的,用git log -- filename
就可以了。
$ git rm a.txt
$ git log a.txt # 报错
fatal: ambiguous argument 'a.txt': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
$ git log -- a.txt # ok
现在应该能理解--
的用处了吧。