代码之家  ›  专栏  ›  技术社区  ›  neoneye

Git签出新名称下文件的旧版本

git
  •  223
  • neoneye  · 技术社区  · 15 年前

    我有文件” main.cpp “在我的编辑器中打开。

    我想看看以前的版本 主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> 
    

    更新2:Jakub Nar_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 回复  |  直到 6 年前
        1
  •  258
  •   Mike Williamson    6 年前

    您可以使用“Git Show”进行以下操作:

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

    (注意有结肠[ : ]字符介于 HEAD^ main.cpp ) <revision>:<path> 语法描述见 git rev-parse “指定修订”部分最后一点旁的手册页:

    • <rev>:<path>,例如head:readme、:readme、master:/readme

      后缀 : 后面是一个路径,它在树型对象中的给定路径处命名blob或树,该对象由冒号前面的部分命名。 :path (冒号前面有一个空部分)是下面描述的语法的一种特殊情况:在给定路径的索引中记录的内容。

      一条从 ./ ../ 相对于当前工作目录。给定路径将转换为相对于工作树的根目录。这对于从与工作树具有相同树结构的提交或树中处理blob或树最有用。

    注意 <path> 这里是 路径相对于 顶级目录 您的项目,即目录 .git/ 目录。(或者更确切地说) <修订版; “(通常可以是 <树ISH & GT; ,即表示树的东西)

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

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


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

    prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp
    
        2
  •  21
  •   DilithiumMatrix    8 年前

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