http://norbauer.com/notebooks/code/notes/git-revert-reset-a-single-file
我找到了一个帖子。
但仍然不知道
之间有什么区别 git checkout <filename>
git checkout -- <filename>
在什么情况下我应该分别使用第一个和第二个?
答案 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)
--
之后的任何内容都被视为文件名(而不是程序参数)。例如,如果您的文件名以短划线开头,则这很重要。