除了其他答案列出的所有选项,你可以使用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可以让你立即获得旧版本,但如果你想用它做一些事情,从那里做这件事远不如在索引中重置那个版本那么方便。