2009-05-20 84 views
188

我在我的编辑器中打开了文件“main.cpp”。git-checkout以新名称更新文件的旧版本

我想在编辑器中看到“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

prompt> git --version 
git version 1.6.0.4 
prompt> 

混帐IM UPDATE2:的JakubNarębski答案是:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp 
prompt> 

UPDATE3:果报工作者的答案,对于特定的修订:

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

你用什么编辑器?也许它有插件/插件/模块添加支持Git? – 2009-05-20 15:25:08

+0

我使用textmate。它有一些git的支持,我没有检查,但如果它可以做到这一点。 – neoneye 2009-05-20 15:40:16

+0

的TextMate有混帐束:http://github.com/timcharper/git-tmbundle(你应该检查InterfacesFrontendsAndTools页git的维基:http://git.or.cz/gitwiki/) – 2009-05-20 16:13:58

回答

211

您可以使用 “混帐秀” 为:

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

(请注意,没有冒号HEAD^和main.cpp`之间 ':' 字符。)的“<修订><路径>指定版本‘部分“语法在git rev-parse手册页中所描述的,倒数第二个点’:

  • <转>:<路径>,例如HEAD:自述,:自述,主:./自述

    后跟一个路径名在由所述冒号之前的部分命名树肥胖型对象的给定路径上的斑点或树后缀::path(在冒号前有一个空的部分)是下面描述的语法的特例:记录在给定路径的索引中的内容。

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

注意, “<路径>” 这里到处是相对路径项目的顶级目录,即具有.git/目录的目录。 (或者更精确地说为“<修订>”(这一般可以是任何<树十岁上下>,即一些代表树))

如果你想使用相对路径添加到当前目录下,你需要使用“./ <路径>‘语法(或’../ <路径>”从当前目录上)。

编辑2015年1月15日:增加了大约相对路径语法信息


可以使用低级别(管道),在大多数情况下得到的结果相同git cat-file命令:

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

只是为了增加的Jakub的回答是:你甚至不用到输出到文件重定向与>,如果你只是在走过场文件感兴趣在终端中的内容。您可以运行$ git show 58a3db6:path/to/your/file.txt

0

的git的show命令没有任何(使用1.6.4.msysgit)为我工作。也许与Windows路径分隔符有关?

我最终只是下载和使用QGit ....容易得多!

相关问题