2012-01-01 37 views
3

考慮在後端使用git的項目管理應用程序。將整個項目切換到之前的提交

新版本總是使用git add .,然後是git commit創建。

爲了評估的目的,我想要一種方式來獲取存儲在其中的舊版本項目,以這種方式將整個目錄內容恢復爲指定的提交。此外,在評估之後,內容必須恢復回來到最新版本。

這是如何實現的?

額外信息(可能不是必需的):它是一個網絡應用程序,用於存儲運行在php,遠程服務器上,並通過網絡訪問的學術項目。

+0

這有絕對無關,與「git的恢復」,真的不應該被貼上標籤。 git中的'還原'意味着應用一個提交,該提交反轉以前應用的提交。 – 2012-01-01 14:07:25

回答

8

這是git的一個非常基本的特徵:git checkout

$ git checkout branch_or_tag_name 

更改您的工作目錄匹配該分支或標記。

$ git checkout commit_hash 

使您的當前目錄反映您提交發生時的存儲庫狀態。 (小心如果你這樣做,你將會處於「分離頭部」模式 - 你不應該修改那個狀態下的文件。)

你也可以簡單地爲這個「評估」創建一個分支並檢查它在一個操作中:

$ git checkout -b evaluation commit_hash 

當你完成後,只需檢出你以前的分支,工作目錄將被更新。

$ git checkout master # or whatever your main branch is. 

(也可能是git branch -d evaluation如果你不需要這樣了。)

3

另一個解決方案是,如果你想在另一個目錄以外的工作目錄中的文件,使用git archive

首先,創建git branch您的REF(有沒有真正的Git分支任何,他們被稱爲裁判,這點提交,從而所有的歷史背後):

git branch oldversion <refspec> 

git help branch什麼是refspec可以是(SHA1,從另一個refspec的相對「路徑」等)。

然後,創建您希望您的舊文件是目錄(姑且稱之爲/path/to/oldstuff),並使用git存檔從項目目錄:

git archive oldversion | tar xvf - -C /path/to/oldstuff 

例子:我用的是最新的Linux內核的所有時間,並有一個Git倉庫和Greg KH的穩定樹。當我想擁有最新的穩定樹的樹編譯它,這裏是我做的(這裏,作爲穩定的內核3.1.6):

$ cd /usr/src/linux-git 
$ su 
# git archive --prefix=linux-3.1.6/ v3.1.6 | tar xvf - -C ../ 
+0

爲'git檔案'+1;一個偉大的git命令沒有得到足夠的愛 – lhagemann 2012-01-01 13:50:25