当前位置:  开发笔记 > IOS > 正文

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

如何解决《git-checkout新名称下的旧文件修订版》经验,为你挑选了2个好方法。

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.



1> Jakub Narębs..:

您可以使用"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_':')不同.
我对一个完整的副本感兴趣,但git-show只显示了差异..我试过玩--pretty选项..提示> git show --pretty = fuller HEAD ^ main.cpp但它没有解决它.
这可能意味着你给出了错误的PATHNAME(不幸的是因为"git show"魔法git无法给出更好的错误信息).它应该是相对于项目的顶级目录的FULL路径名:$(git ls-tree -r --name-only HEAD ^ | grep main.cpp)
而不是完整路径,来自文档:"以./或../开头的路径是相对于当前工作目录的." 适用于我的1.8.5版本.

2> karmi..:

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

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有