git-checkout一个新名字下的文件的旧版本

我在我的编辑器中打开了“ 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 

它可以被简化,所以我不必closures编辑器中的“main.cpp”?

我所希望的是可以做到这一点的git-checkout变体。


更新:即时通讯在Mac OS X 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> 

UPDATE3:Karmi的回答,对于一个具体的修改:

 prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj prompt> 

你可以使用“git show”:

 prompt> git show HEAD^:main.cpp > old_main.cpp 

(注意在HEAD^和main.cpp之间有冒号' : ')。“ 修改<path> ”语法在git rev-parse联机帮助中描述,在“指定修订”部分:

  • <rev>:<path>,例如HEAD:README,:README,master:./ README

    一个后缀:后跟一个path,在冒号之前的部分所指定的tree-ish对象的给定path中命名blob或tree。 :path (在冒号前有一个空的部分)是下面描述的语法的特例:logging在给定path索引处的内容。

    ./../开头的path与当前工作目录相关。 给定的path将被转换为相对于工作树的根目录。 这对于从具有与工作树相同的树结构的提交或树来处理blob或树是非常有用的。

请注意,这里的“ <path>是相对于你的项目的顶层目录完整path,即带有.git/目录的目录。 (或者更确切地说“ <修改> ”(通常可以是<tree-ish> ,即表示树的东西))

如果要使用相对于当前目录的path,则需要使用“./ <path>”语法(或“../ <path>”从当前目录上移)。

编辑2015-01-15:添加关于相对path语法的信息


您可以在大多数情况下使用低级(pipe道) git cat-file命令获得相同的输出:

 prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp 

只需要添加Jakub的答案:如果您只想浏览terminal中的文件内容,则甚至不必将输出redirect到具有>的文件。 你可以运行$ git show 58a3db6:path/to/your/file.txt

git show命令也不适用于我(使用1.6.4.msysgit)。 也许与Windowspath分隔符有关?

我结束了只是下载和使用QGit ….更容易!