使用git show
为了完成你自己的回答,语法确实是这样的:
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
该命令采用通常的修订样式,这意味着您可以使用以下任何一种方式:
- 分支名称(如 建议 by 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
命令,它取代了 令人困惑的 git checkout
命令。
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
这将仅在工作树中还原与"source" (-s
)提交SHA1或分支somebranch
中存在的文件。
要还原索引:
git restore -s <SHA1> -SW -- afile
(-SW
:缩写形式,表示--staged --worktree
)
正如starwarswii在评论中所指出的
It lets you pipe the contents into a file, which is great if you want to just quickly compare files from a commit.
E.g. you can do:
git show 1234:path/to/file.txt > new.txt
git show 1234~:path/to/file.txt > old.txt
then compare them.
使用低级别的git工具命令
在git1.5.x之前,可以使用以下一些低级别的工具完成:
git ls-tree <rev>
显示提交中一个或多个“blob”对象的列表
git cat-file blob <file-SHA1>
以指定版本已提交的方式查看文件(类似于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
列出了修订版 $REV
中 $file
的对象 ID,这将从输出中剪切出来并用作 git-cat-file
的参数。实际上,git-cat-file
应该被称为 git-cat-object
,它只是将该对象转储到 stdout
。
注意:自Git 2.11(2016年第4季度)以来,您可以对git cat-file
输出应用内容过滤器。
查看commit 3214594、commit 7bcf341(2016年9月9日)、commit 7bcf341(2016年9月9日)和commit b9e62f6、commit 16dcc29(2016年8月24日),由Johannes Schindelin (dscho
)提交。
(由Junio C Hamano -- gitster
--合并于commit 7889ed2,2016年9月21日)
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年第四季度)中已得到纠正。
请参见
commit cc0ea7c(由
Jeff King (peff
)于2017年9月21日提交)。
(由Junio C Hamano -- gitster
--在commit bfbc2fc中合并,2017年9月28日)
git show
(不太有用地)使用不同的语法来处理冒号。git show 2c7cf:my_file.txt
。 - Steve Bennett>
进行shell输出重定向。 - Konstantin Pelepelin