我main.cpp
在编辑器中打开了文件" ".
我想main.cpp
在编辑器中看到之前的修订版" ".
我现在这样做的方式是这样的.
close "main.cpp" in the editor prompt> mv main.cpp tmp prompt> git checkout HEAD^ main.cpp prompt> mv main.cpp old_main.cpp prompt> mv tmp main.cpp prompt> open "main.cpp" and "old_main.cpp" in the editor
可以简化,所以我不必在编辑器中关闭"main.cpp"吗?
我希望的是一个git-checkout
可以做到这一点的变体.
更新:我在mac osx 10.5.7上使用git
prompt> git --version git version 1.6.0.4 prompt>
UPDATE2:JakubNarębski的回答是:
prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp prompt>
更新3:Karmi的答案,针对特定修订:
prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj prompt>
Jakub Narębs.. 286
您可以使用"git show":
prompt> git show HEAD^:main.cpp > old_main.cpp
(注意:
在HEAD^
和之间有冒号[ ]字符main.cpp
.)
语法在git rev-parse手册页中描述,在"指定修订"部分的最后一点旁边:
: ,例如HEAD:README,:README,master:./ README
:
后跟路径的后缀命名在冒号前面的部分命名的树形对象中给定路径上的blob或树.:path
(在冒号前面有一个空部分)是下面描述的语法的特例:在给定路径的索引中记录的内容.以当前工作目录开头
./
或../
相对于当前工作目录的路径.给定路径将转换为相对于工作树的根目录.这对于从具有与工作树具有相同树结构的提交或树来解决blob或树最有用.
请注意,
这是相对于项目的顶级目录的FULL路径,即带有目录的目录.(或者更准确地说是" .git/
如果要使用相对于当前目录的路径,则需要使用./
语法(或../path
从当前目录开始).
编辑2015-01-15:添加了有关相对路径语法的信息
在大多数情况下,您可以使用低级(管道)git cat-file
命令获得相同的输出:
prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp
"git show HEAD ^ main.cpp"(HEAD ^和main.cpp之间的空格)与"git show HEAD ^:main.cpp"(HEAD ^和main.cpp之间的_colon_':')不同. (7认同)
我对一个完整的副本感兴趣,但git-show只显示了差异..我试过玩--pretty选项..提示> git show --pretty = fuller HEAD ^ main.cpp但它没有解决它. (3认同)
这可能意味着你给出了错误的PATHNAME(不幸的是因为"git show"魔法git无法给出更好的错误信息).它应该是相对于项目的顶级目录的FULL路径名:$(git ls-tree -r --name-only HEAD ^ | grep main.cpp) (2认同)
而不是完整路径,来自文档:"以./或../开头的路径是相对于当前工作目录的." 适用于我的1.8.5版本. (2认同)
karmi.. 23
只是添加到Jakub的答案:>
如果您只想在终端中浏览文件内容,则甚至不必将输出重定向到文件.你可以跑$ git show 58a3db6:path/to/your/file.txt
.
您可以使用"git show":
prompt> git show HEAD^:main.cpp > old_main.cpp
(注意:
在HEAD^
和之间有冒号[ ]字符main.cpp
.)
语法在git rev-parse手册页中描述,在"指定修订"部分的最后一点旁边:
: ,例如HEAD:README,:README,master:./ README
:
后跟路径的后缀命名在冒号前面的部分命名的树形对象中给定路径上的blob或树.:path
(在冒号前面有一个空部分)是下面描述的语法的特例:在给定路径的索引中记录的内容.以当前工作目录开头
./
或../
相对于当前工作目录的路径.给定路径将转换为相对于工作树的根目录.这对于从具有与工作树具有相同树结构的提交或树来解决blob或树最有用.
请注意,
这是相对于项目的顶级目录的FULL路径,即带有目录的目录.(或者更准确地说是" .git/
如果要使用相对于当前目录的路径,则需要使用./
语法(或../path
从当前目录开始).
编辑2015-01-15:添加了有关相对路径语法的信息
在大多数情况下,您可以使用低级(管道)git cat-file
命令获得相同的输出:
prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp
只是添加到Jakub的答案:>
如果您只想在终端中浏览文件内容,则甚至不必将输出重定向到文件.你可以跑$ git show 58a3db6:path/to/your/file.txt
.