"git checkout <filename>"和"git checkout - - <filename>"之间的区别

Kit*_* Ho 102 git

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

我找到了一个帖子.

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

  1. git checkout <filename>

  2. git checkout -- <filename>

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

zwo*_*wol 197

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

rm -f      # does nothing
rm -- -f   # deletes a file named "-f"
Run Code Online (Sandbox Code Playgroud)

git checkout1--意味着后续参数不是它的可选"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"
Run Code Online (Sandbox Code Playgroud)

和选项/文件消歧:

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"
Run Code Online (Sandbox Code Playgroud)

如果你有一个名字开头的分支,我不知道你做了什么-.也许首先不要这样做.


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

  • git checkout <name>检出分支<name>.git checkout - <name>检出文件<name>的索引版本. (12认同)
  • 谢谢,遗憾的是git文档并没有真正解释这一点 (3认同)

jtb*_*des 7

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