带有两个非选项参数的`git show`是什么意思?

时间:2019-01-24 17:27:07

标签: git

DoCmd.OpenReport "rptServiceRecord", acViewPreview, , "[WorkOrderID] = '" & Forms("frmService")("txtWO").Value & "'", acNormal 的手册页上说

git show

来自https://stackoverflow.com/a/7196615

git show [<options>] [<object>…]

命令是什么意思?

同时是git show some_commit_sha1 -- some_file.c some_commit_sha1 some_file.c的论点吗?

相同吗
<object>

谢谢。

1 个答案:

答案 0 :(得分:3)

它们不是两个<object>参数,这里的文档不是很好。但是,git show是面向用户(“瓷器”)的命令,首先使用它来管道传输到其他Git命令通常不是一个好习惯。

在这种情况下,git show <commit> -- <path>结束时将调用git log --no-walk --cc <commit> -- <path>的等效项。也就是说,它首先运行与git log --no-walk相同的代码来生成该特定提交的日志消息,并根据任何格式指令对其进行格式化(无,因此默认为--pretty=medium)。然后,即使提交是合并提交,它也会生成一个差异列表-默认情况下,git log不会为合并提交生成差异列表,因此使用--cc选项。

各种git diff命令(包括瓷器git diff本身和管道变量git diff-treegit diff-filesgit diff-index)都可以让您指定特定的路径名​​或路径规范。通常,很明显,某个东西是路径名(例如README.txt)还是提交说明符(例如master)。不过,还是有一些模棱两可的情况:如果您有一个名为master文件,怎么办?

在这些模棱两可的情况下,为了将路径名/ pathspec参数与提交说明符区分开,这些命令使用the POSIX specifications for utility commands定义的--约定(尤其是准则10)。那就是:

git diff-tree master -- develop

告诉git diff-tree您想要的 commit master,而您关心的 file 被命名为develop,而:

git diff-tree develop -- master

告诉git diff-tree commit develop,而 file master,并且:

git diff-tree develop master -- release

告诉git diff-tree,两次提交 依次为developmaster,而 file 为{{1 }}。请注意,release最多包含两个git diff-tree参数:仅给出一个这样的参数时,含义是一个参数是一个提交说明符,Git应该将提交的父对象与提交进行比较

结论

  1. 为确保可靠性(避免被各种<tree-ish>配置项绊倒,例如通过diff强制使用颜色序列),答案中的命令实际上应该与阅读:

    color.diff=always

    ({{1}的git diff-tree -p <commit> -- <file> | git apply -R 选项打开了-p选项)。

  2. diff-tree文档,尤其是摘要行,不足。改进(不一定是完整的)应为:

    -r