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

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

我find了一个post。

但是还是不知道有什么区别

  1. git checkout <filename>

  2. git checkout -- <filename>

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

这个特殊的“选项” --意思是“把这个点之后的每个论点当作文件名,不pipe它看起来如何”。 这不是Git特有的,这是一个普通的Unix命令行约定。 通常你用它来说明一个参数是一个文件名而不是一个选项 ,例如

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

git checkout 1也需要--意味着后面的参数不是它的可选“treeish”参数,指定你想要的提交。

因此,在这种情况下,总是使用它是安全的 ,但是当您要恢复的文件的名称以-开头,或者与分支的名称相同时,则需要使用它。 分支/文件消歧的一些例子:

 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在这种模式下; “结帐”也可以做其他几件事情。 我从来没有理解过为什么gitselect实现“放弃未提交的更改”作为“checkout”子命令的一种模式,而不是像大多数其他VCS那样“恢复”,或者我认为在git中可能更有意义的“重置”。

之后的任何内容都被视为文件名(而不是程序参数)。 例如,如果您有以破折号开头的文件名,这一点很重要。