“git checkout <filename>”和“git checkout - - <filename>”</filename> </filename>之间的区别

时间:2011-07-03 04:45:42

标签: git

http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file

我找到了一个帖子。

但仍然不知道

之间有什么区别
  1. git checkout <filename>

  2. git checkout -- <filename>

  3. 在什么情况下我应该分别使用第一个和第二个?

2 个答案:

答案 0 :(得分:186)

特殊的“选项”--意味着“将此点之后的每个参数视为文件名,无论它看起来如何。”这不是Git特有的,它是一般的Unix命令行约定。通常,您使用它来阐明参数是文件名而不是选项,例如

rm -f      # does nothing
rm -- -f   # deletes a file named "-f"

git checkout 1 也使--表示后续参数不是可选的“treeish”参数,用于指定您想要的提交。

因此,在此上下文中,安全始终使用--,但当您要还原的文件的名称以{开头时} 需要 {1}},或者与分支的名称相同。分支/文件消歧的一些示例:

-

和选项/文件消歧:

git checkout README     # would normally discard uncommitted changes
                        # to the _file_ "README"

git checkout master     # would normally switch the working copy to
                        # the _branch_ "master"

git checkout -- master  # discard uncommitted changes to the _file_ "master"

如果你的名字以git checkout -p -- README # interactively discard uncommitted changes # to the file "README" git checkout -- -p README # unconditionally discard all uncommitted # changes to the files "-p" and "README" 开头的分支,我不确定你会怎么做。也许最初不要这样做。


这种模式下

1 ; “checkout”也可以做其他几件事。我从来没有理解为什么git选择实施“丢弃未提交的更改”作为“checkout”子命令的模式,而不是像大多数其他VCS那样“恢复”,或者“重置”,我认为这可能在git自己的术语中更有意义。

答案 1 :(得分:6)

--之后的任何内容都被视为文件名(而不是程序参数)。例如,如果您的文件名以短划线开头,则这很重要。