git show filename显示差异,同时
git show branch:path/to/filename显示文件的内容。
我查看了帮助(git show --help),我的理解是它应该默认为 HEAD,即git show HEAD:filename.
但这会产生我预期的文件内容。有人有任何见解吗?
通过阅读git help show ,我很惊讶地发现没有提到额外的[<path>...]参数。描述中提到了git diff-tree,虽然git help diff-tree提到了 的存在[<path>...],但没有描述它的作用。
这显然是(恕我直言)的一个缺点git help show。
git diff尽管如此,与 or很相似git log,git show <object>...可以扩展到git show <object>... [<path>...], 或非歧义的git show <object>... -- <path>...,它应用于提交对象以缩小这些提交中显示的内容。指定对显示树或 blob 时<path>...没有影响。git show
文档中提到的一点是,在命名目录(树)时,仅显示该目录的内容(而不是差异),而在命名文件(blob)时,仅显示该文件的内容显示(也不是差异)。
命名此类事物的描述如下git help gitrevision:
# some ways to name a tree:
git show <commit>:path/to/dir # path from the top-level
git show <commit>:./dir # path relative to your pwd
git show <commit>: # the top-level of your repo at <commit>
git show <commit>^{tree}
# some ways to name a blob:
git show <commit>:full/path/to/file
git show <commit>:./rel/path/to/file
Run Code Online (Sandbox Code Playgroud)
据我所知,一条额外的信息并未完全在 git doc 中表述:
git diff对于诸如,之类的命令git log,git show尝试根据您在命令行上传递的名称来猜测什么是对象以及什么是过滤路径。
含义:当你打字时git show foo/bar
如果foo/bar碰巧匹配分支或标签名称,它将显示该对象(及其差异...),而不是诉诸默认值HEAD
如果foo/bar不匹配任何分支或标签,但匹配磁盘上的路径,它将尝试将其视为默认HEAD提交上的过滤路径,如git show HEAD foo/bar; 这将显示差异,缩小到路径foo/bar
如果字符串实际上包含 a :,如git show foo:baror中那样git show :foo/bar,git将明确地将其视为 blob 或树名称(with foo:bar: object located at barinside commit foo, with :foo/bar, object located at foo/barinside the default HEADcommit);这将显示纯内容,并且没有差异
--您可以通过在命令行中添加 a 来消除猜测:
# left of '--' : object names ('foo' and 'bar')
# right of '--' : filtering paths ('baz' and 'buzz')
git show foo bar -- baz buzz
Run Code Online (Sandbox Code Playgroud)
如果您未--在命令行中提供 a,并且名称可能不明确,您将看到如下错误消息:
# with a file named 'master' on disk:
$ git show master
fatal: ambiguous argument 'master': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Run Code Online (Sandbox Code Playgroud)
回到OP的问题:
git show filename失败发生在上面第 2 点,git show HEAD:path/to/filename落在第3点。正如第 2 点所述,OP 问题中唯一需要纠正的(小但有影响力的)事情是git show filename默认为git show HEAD -- filename,而不是git show HEAD:filename。
git show <path>相当于git show HEAD <path>.
如果没有<path>,它会打印日志消息和头提交的已更改文件的差异。
使用<path>,如果文件在提交中发生更改,它会打印日志消息以及头提交指定路径的差异。如果没有,则不会打印任何内容。
| 归档时间: |
|
| 查看次数: |
249 次 |
| 最近记录: |