我有一个来自多个提交前的.tex
文件版本,我希望得到一份副本。我有提交的sha1哈希值,它具有我想要的那个文件的版本。我不想替换当前版本的文件。相反,我想获得一个单独的副本,反映它在旧版本中的状态。
许多类似的问题建议使用git checkout <sha1> -- file.tex
,但这只是一直给出“错误:pathspec'file.tex'与git已知的任何文件都不匹配。”
我感兴趣的文件最初存在于存储库的顶级目录中。我目前在存储库的子目录中尝试运行此命令,以便在子目录中获取旧版本的file.tex。
这可能吗?我怎么能这样做?
答案 0 :(得分:62)
您可以使用git cat-file
将文件内容转储到标准输出,并将其重定向到您想要的目的地:
git cat-file -p <sha1>:./file.tex > wherever.tex
如果您位于存储库的子目录中,则./
是必需的,如果您位于存储库的顶层,则可以省略它。此外,这可能不适用于旧版本的git,在这种情况下,您需要显式提供相对于存储库根目录的文件的完整路径。
答案 1 :(得分:9)
我认为最好的解决方案是暂时覆盖您的文件。在您的存储库的顶级:
git checkout <sha1> file.tex
cp file.tex directory
git checkout file.tex
答案 2 :(得分:1)
将git show
与绝对存储库路径一起使用:
workdir $ git显示修订版本:repo / module / package / code.file> code.file.old
或相对于当前目录的路径:
package $ git show版本:./ code.file> workdir / code.file.old
与检出文件相反,show
不会本质上更改您的工作区,您可以对输出执行任何操作。
贷记到this answer,当然,请在manual中查看全部详细信息。