Git checkout双重破折号的含义

mot*_*lrd 253 git git-checkout

这个git命令中文件名之前的双破折号是什么意思?

git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

这是强制性的吗?它等同于

git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

Die*_*Epp 359

假设我有一个path/to/file.txt在我的Git存储库中命名的文件,我想恢复它的更改.

git checkout path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

现在假设文件名为master...

git checkout master
Run Code Online (Sandbox Code Playgroud)

哎呦!这改变了分支.将--要检出的树与要检出的文件分开.

git checkout -- master
Run Code Online (Sandbox Code Playgroud)

如果一些freako添加了一个名为-f我们的存储库的文件,它也可以帮助我们:

git checkout -f      # wrong
git checkout -- -f   # right
Run Code Online (Sandbox Code Playgroud)

这在git-checkout中记录:Argument Disambiguation.

  • @NHDaly:是的,这是真的.但是,术语说明:"Bash"只有几个命令(可能是20个左右),大多数命令都是与Bash不同的程序.它实际上是POSIX标准的一部分,` - `可用于将选项与其他参数分开,因此您将在命令如`cp`和`mv`(它们不是Bash的一部分)中看到它. (40认同)
  • 对于许多bash命令都是如此,而不仅仅是git命令,是吗? (12认同)
  • 知道为什么在`checkout`命令文档中没有正确描述这种语法? (6认同)
  • @DietrichEpp正确,但在进入Stack Overflow之前已经阅读了语法(和示例),我仍然不明白为什么会有或不想使用`-`.作为一个不是来自linux背景的人,它的作用并不明显.对我来说,它似乎是一个特定于git的语法,没有描述它的功能目的.我认为最好有一个简短的描述,如其他选项,或至少链接到[linux手册页](http://linux.die.net/man/1/bash). (6认同)
  • @DietrichEpp在几个地方,它被列为`checkout`命令的可能参数,但文档中没有任何地方解释它的作用或使用它的原因......这最终将我带到了这里. (4认同)

tim*_*liu 106

双短划线" - "表示"命令行标志结束",即它告诉前面的命令不要尝试解析命令行选项之后的内容.

  • 为了清楚起见,在 `git` 中它的含义不止于此,因为它还意味着 `--` 之后的参数不能是分支名称,并且暗示 `--` 之前的参数不能是文件路径。 (8认同)