使用git show
要完成您自己的答案,语法确实是
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
该命令采用通常的修订风格,这意味着您可以使用以下任何一种:
- 分支名称(由ash建议)
HEAD
+ x^
字符数
- 给定修订版的 SHA1 哈希
- 给定 SHA1 哈希的前几个(可能是 5 个)字符
提示请务必记住,在使用“ git show
”时,始终指定从存储库根目录开始的路径,而不是当前目录位置。
(尽管Mike Morearty提到,至少在 git 1.7.5.4 中,您可以通过将“ ./
”放在路径的开头来指定相对路径。例如:
git show HEAD^^:./test.py
)
使用git restore
使用 Git 2.23+(2019 年 8 月),您还可以使用git restore
which 替换令人困惑的git checkout
命令
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
这将仅在工作树上恢复“源”(-s
)提交 SHA1 或分支中存在的文件somebranch
。
要恢复索引:
git restore -s <SHA1> -SW -- afile
( -SW
: 缩写--staged --worktree
)
正如starwarswii的评论中所指出的那样
它允许您将内容通过管道传输到文件中,如果您只想快速比较提交中的文件,这非常有用。
例如,您可以这样做:
git show 1234:path/to/file.txt > new.txt
git show 1234~:path/to/file.txt > old.txt
然后比较它们。
使用低级 git 管道命令
在 git1.5.x 之前,这是通过一些管道完成的:
git ls-tree <rev>
在提交中显示一个或多个“blob”对象的列表
git cat-file blob <file-SHA1>
cat 文件,因为它已在特定修订版中提交(类似于 svn cat)。用于git ls-tree
检索给定文件 sha1 的值
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree
列出了$file
在修订中的对象 ID $REV
,这被从输出中删除并用作 的参数git-cat-file
,它应该真正被调用git-cat-object
,并且只是将该对象转储到stdout
.
注意:从 Git 2.11(2016 年第四季度)开始,您可以将内容过滤器应用于git cat-file
输出。
请参阅
Johannes Schindelin ( )的提交3214594、
提交7bcf341 ( 2016 年 9 月 9 日)、
提交 7bcf341(2016 年 9 月 9 日)和
提交 b9e62f6、
提交 16dcc29(2016 年 8 月 24 日) 。(由Junio C Hamano 合并——在提交 7889ed2中,2016 年 9 月 21 日)dscho
gitster
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
注意:“ git cat-file --textconv
”最近(2017 年)开始出现段错误,已在 Git 2.15(2017 年第四季度)中更正
请参阅Jeff King ( )提交的 cc0ea7c (2017 年 9 月 21 日) 。(由Junio C Hamano 合并——在提交 bfbc2fc中,2017 年 9 月 28 日)peff
gitster