使用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恢复
在Git 2.23+(2019年8月)中,你还可以使用Git restore来替换令人困惑的Git checkout命令
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
这将只在工作树上恢复“源”(-s)提交SHA1或分支somebranch中的文件。
还可以恢复索引:
git restore -s <SHA1> -SW -- afile
(-SW:阶段性工作树的缩写)
正如starwarswii的评论所指出的那样
它允许您将内容管道到一个文件中,如果您只想快速比较来自提交的文件,这是非常棒的。
例如,你可以做:
Git显示1234:path/to/file.txt > new.txt
Git显示1234~:path/to/file.txt > old.txt
然后比较它们。
使用低级git管道命令
git1.5之前。X,这是通过一些管道完成的:
Git ls-tree <rev>
在提交中显示一个或多个“blob”对象的列表
git cat-file blob <file-SHA1> . txt
Cat在特定修订中提交的文件(类似于SVN
猫)。
使用git ls-tree来检索给定file-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-object,并简单地将该对象转储到stdout。
注意:从Git 2.11 (Q4 2016)开始,您可以对Git cat文件输出应用内容过滤器。
看到
提交3214594,
commit 7bcf341(2016年9月9日),
commit 7bcf341(2016年9月9日),以及
提交b9e62f6,
Johannes Schindelin (dscho)提交16dcc29(2016年8月24日)。
(由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年第四季度)中得到更正
参见Jeff King (peff)的commit cc0ea7c(2017年9月21日)。
(由Junio C Hamano—gitster—在commit bfbc2fc中合并,2017年9月28日)