2009-05-20 40 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 ....容易得多!

相關問題