我有一个Git存储库,我想看看几个月前一些文件的样子。我找到了那个日期的修订本;这是27 cf8e84bb88e24ae4b4b3df2b77aab91a3735d8。我需要看到一个文件看起来像什么,并将其保存为(“新”)文件。

我设法使用gitk查看文件,但它没有保存它的选项。我尝试使用命令行工具,我得到的最接近的是:

git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt

但是,该命令显示的是一个差异,而不是文件内容。我知道我可以稍后使用类似PAGER=cat的东西并将输出重定向到一个文件,但我不知道如何获得实际的文件内容。

基本上,我在找svn cat之类的东西。


当前回答

git checkout {SHA1} -- filename

这个命令从特定的提交中获取复制的文件。

其他回答

你需要提供文件的完整路径:

git show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8:full/repo/path/to/my_file.txt
git checkout {SHA1} -- filename

这个命令从特定的提交中获取复制的文件。

除了其他答案列出的所有选项,你可以使用git重置感兴趣的git对象(散列,分支,HEAD~x,标签,…)和你的文件路径:

git reset <hash> /path/to/file

在你的例子中:

git reset 27cf8e8 my_file.txt

这样做的目的是将my_file.txt还原为索引中提交27cf8e8处的版本,同时在工作目录中保持它的原形(即当前版本)。

从这里开始,事情变得非常简单:

you can compare the two versions of your file with git diff --cached my_file.txt you can get rid of the old version of the file with git restore --staged file.txt (or, prior to Git v2.23, git reset file.txt) if you decide that you don't like it you can restore the old version with git commit -m "Restore version of file.txt from 27cf8e8" and git restore file.txt (or, prior to Git v2.23, git checkout -- file.txt) you can add updates from the old to the new version only for some hunks by running git add -p file.txt (then git commit and git restore file.txt).

最后,你甚至可以交互式地选择哪块(s)重置在第一步,如果你运行:

git reset -p 27cf8e8 my_file.txt

所以git重置路径为你提供了很大的灵活性,可以检索文件的特定版本,与当前签出的版本进行比较,如果你选择这样做,还可以完全还原到该版本,或者只还原到该版本的一些块。


编辑:我刚刚意识到我没有回答你的问题,因为你想要的不是一个不同的或一个简单的方法来检索部分或全部旧版本,而只是cat那个版本。

当然,你仍然可以在重置文件后这样做:

git show :file.txt

输出到标准输出或

git show :file.txt > file_at_27cf8e8.txt

但如果这就是你想要的,直接运行git show 27cf8e8:file.txt,就像其他人建议的那样,当然要直接得多。

我将留下这个答案,因为直接运行git show可以让你立即获得旧版本,但如果你想用它做一些事情,从那里做这件事远不如在索引中重置那个版本那么方便。

在Windows中,使用Git Bash:

在工作空间中,将dir更改为文件所在的文件夹 Git显示cab485c83b53d56846eb883babaaf4dff2f2cc46:./your_file。Ext > old.ext

如果你想用以前提交的文件或不同分支的文件内容替换/覆盖当前分支中的文件内容,你可以使用这些命令:

git checkout 08618129e66127921fbfcbc205a06153c92622fe path/to/file.txt

or

git checkout mybranchname path/to/file.txt

然后,您必须提交这些更改,以便它们在当前分支中有效。