我有一个Git存储库,我想看看几个月前一些文件的样子.我在那个日期找到了修改版,而且它是27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8
.我需要查看一个文件的外观,并将其保存到文件中.
我设法看到文件使用gitk
,但它没有保存选项.我尝试使用命令行工具,我得到的最接近的是:
git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt
但是,此命令显示diff而不是文件内容.我知道我以后可以使用类似的东西PAGER=cat
并将输出重定向到文件,但我不知道如何获得实际的文件内容.
基本上,我正在寻找类似svn cat的东西.
要完成您自己的答案,语法确实如此
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
)
在git1.5.x之前,这是通过一些管道完成的:
git restore
显示提交中的一个或多个"blob"对象的列表
git checkout
cat一个文件,因为它已在特定修订版本中提交(类似于svn cat).使用git ls-tree检索给定文件-sha1的值
git restore -s-- afile git restore -s somebranch -- afile
git-ls-tree列出了$ REV版本中$ file的对象ID,这是从输出中删除并用作git-cat-file的参数,它应该被称为git-cat-object,并且只是转储stdout的那个对象.
注意:自Git 2.11(2016年第4季度)起,您可以将内容过滤器应用于-s
输出!
请参阅提交3214594,提交7bcf341(2016年9月9日),提交7bcf341(2016年9月9日),并提交b9e62f6,提交16dcc29(2016年8月24日)作者:Johannes Schindelin(somebranch
).
(由Junio C -SW
Hamano合并- -在提交7889ed2,2016年9月21日)
--staged --worktree
:支持git ls-tree
/git cat-file blob
批处理模式即使"
git cat-file
"是一个采用文件系统数据流并将其放入Git对象存储的工具,也允许执行"外部世界到Git"的转换(例如,行尾转换和应用程序)清理过滤器),默认情况下从早期就开始使用它的反向操作"dscho
",它从Git对象存储中获取一个对象并外部化以供外部使用,缺少一个等效的机制.经营"Git-to-outside-world"
git restore -s-SW -- afile
注意:" gitster
"最近开始分段(2017年),已在Git 2.5(2017年第4季度)中更正
请参阅Jeff King()提交cc0ea7c(2017年9月21日).(由Junio C Hamano合并- -在提交bfbc2fc,2017年9月28日)cat-file
--textconv
如果您希望使用先前提交或其他分支中的文件内容替换/覆盖当前分支中的文件内容,则可以使用以下命令执行此操作:
git checkout 08618129e66127921fbfcbc205a06153c92622fe path/to/file.txt
要么
git checkout mybranchname path/to/file.txt
然后,您必须提交这些更改,以使它们在当前分支中有效.
您需要提供文件的完整路径:
git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:full/repo/path/to/my_file.txt
在最简单的方法是这样写:
git show HASH:file/path/name.ext > some_new_name.ext
哪里:
HASH是Git修订版SHA-1哈希数
file/path/name.ext是您要查找的文件的名称
some_new_name.ext是应保存旧文件的路径和名称
git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:my_file.txt > my_file.txt.OLD
这将把my_file.txt从版本27cf8e保存为名为my_file.txt.OLD的新文件
它是用Git 2.4.5测试的.
如果要检索已删除的文件,可以使用HASH~1
(在指定的HASH之前提交一次).
例:
git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8~1:deleted_file.txt > deleted_file.txt
在Windows中,使用Git Bash:
在工作区中,将dir更改为文件所在的文件夹
git show cab485c83b53d56846eb883babaaf4dff2f2cc46:./your_file.ext > old.ext
并很好地将其转储到一个文件中(至少在Windows上) - Git Bash:
$ echo "`git show 60d8bdfc:src/services/LocationMonitor.java`" >> LM_60d8bdfc.java
在"
需要引号,因此保留了换行.