git-checkout新名称下的旧文件修订版

时间:2009-05-20 14:52:08

标签: git

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

2 个答案:

答案 0 :(得分:268)

您可以使用“git show”:

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

(请注意:HEAD^之间存在冒号[main.cpp]字符。)<revision>:<path>手册页中描述了:语法。 “指定修订”部分的最后一点:

  
      
  • &lt; rev&gt;:&lt; path&gt;,例如HEAD:README,:README,master:./ README      
        

    后缀:path后跟一个路径,命名在冒号前的部分命名的树形对象中给定路径上的blob或树。 ./(在冒号前面有一个空部分)是下面描述的语法的特例:在给定路径的索引中记录的内容。

             

    ../<path>开头的路径是相对于当前工作目录的。给定路径将转换为相对于工作树的根目录。这对于从与工作树具有相同树结构的提交或树中寻址blob或树非常有用。

      
  •   

请注意,.git/这里是相对于项目的顶级目录 FULL 路径,即带有./<path>目录的目录。 (或者更准确地说是“&lt; revision&gt; ”(通常可以是任何&lt; tree-ish&gt; ,即代表树的东西))

如果要使用相对于当前目录的路径,则需要使用../path语法(或git cat-file从当前目录开始)。

编辑2015-01-15:添加了有关相对路径语法的信息


在大多数情况下,您可以使用低级(管道)prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp 命令获得相同的输出:

{{1}}

答案 1 :(得分:21)

只是添加到Jakub的答案:如果您只想浏览终端中的文件内容,则甚至不必将输出重定向到>的文件。您只需运行$ git show 58a3db6:path/to/your/file.txt