为什么git status建议在文件名之前使用带有破折号的git checkout?

时间:2017-07-20 00:55:36

标签: git

最好用一个例子解释:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

这可能是一个小细节,但为什么在git checkout -- <file>工作时写git checkout <file>?我测试了它,它也适用于破折号,但我无法弄清楚它们的用途。

2 个答案:

答案 0 :(得分:3)

git checkout filename仅在您没有名为filename的分支时才有效。 :d

--消除歧义。如果要查看名为foo的分支:

> git checkout foo
Switched to branch 'foo'

如果要在当前分支中签出名为foo的文件名:

> git branch
  foo
* master
> git checkout -- foo
> cat foo
This is file `foo` in the `master` branch.

如果您想查看分支foo中存在的名为foo的文件名:

> git branch
  foo
* master
> git checkout foo -- foo
> cat foo
This is file `foo` in the `foo` branch.

答案 1 :(得分:2)

--是从bash借用的语法。来自bash手册页的报价:

  

-
  A - 表示选项结束并禁用进一步的选项处理    - 之后的任何参数都被视为文件名和参数。    - 的参数相当于 - 。