要完成您自己的答案,语法确实是
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
该命令采用通常的修订样式,这意味着您可以使用以下任何一种:
- 分公司名称(如建议由灰)
HEAD
+ x个^
字符
- 给定修订的SHA1哈希
- 给定SHA1哈希的前几个字符(可能是5个)
提示重要的是要记住,使用“ git show
”时,请始终指定从存储库根目录开始的路径,而不是当前目录位置。
(尽管Mike Morearty提到,至少在git 1.7.5.4中,您可以通过./
在路径的开头放置“ ” 来指定相对路径,例如:
git show HEAD^^:./test.py
)
在Git 2.23+(2019年8月)中,您也可以使用git restore
它代替令人困惑的git checkout
命令
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
那将只在工作树上还原“ source”(-s
)提交SHA1或branch中存在的文件somebranch
。
要恢复索引:
git restore -s <SHA1> -SW -- afile
(-SW
:的缩写--staged --worktree
)
在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列出了修订版$ REV中$ file的对象ID,它从输出中切出并用作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
cat-file
:支持--textconv
/ --filters
以批处理模式
即使“ git hash-objects
”(用于获取文件系统上的数据流并将其放入Git对象存储的工具)也可以执行“外部世界到Git”转换(例如,行尾转换和应用程序清理过滤器),并且从很早开始就默认启用该功能,其反向操作“ git cat-file
”从Git对象存储中获取一个对象并进行外部化以供外界使用,但缺少与之等效的机制运行“ Git到外部世界”
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()的commit cc0ea7c(2017年9月21日)。(由Junio C Hamano合并--在commit bfbc2fc中,2017年9月28日)peff
gitster
请注意,要覆盖/替换具有过去内容的文件,您不应再使用令人困惑的git checkout
命令,而应使用git restore
(Git 2.23 +,2019年8月)
git restore -s <SHA1> -- afile
那只会在工作树上仅还原“源”(-s
)中提交SHA1的文件。
要恢复索引:
git restore -s <SHA1> -SW -- afile
(-SW
:的缩写--staged --worktree
)
git show
无助)对冒号使用不同的语法。git show 2c7cf:my_file.txt