2011-03-29 34 views
2

我試圖得到一個文件的以前的版本是這樣的:git的問題越來越先前的文件版本

git checkout <git-hash> 

在此之後,我看到在我的HD文件是以前的版本。我怎樣才能將 這個版本推送到服務器?我試過如下:

git push ab master 

,但我得到的是

Everything up-to-date 

我在做什麼錯?


當我做

git checkout 123456 -- src/test.c

git commit -m "Bringing back test.c from commit 123456"

我得到

Not currentyly on any branch

123456哈希

回答

2

我假設123456是舊提交的名稱,而不是文件的名稱 - 從問題中看不清楚,因爲Ben Hocking points out

當你推送時,你推送一個完整的提交(它定義了一個樹的完整狀態)而不是單個文件。 git push ab master命令與git push ab master:master相同,意思是「用我的master版本更新遠程ab上的master」。錯誤「一切都是最新的」告訴您,您的master分支的所有歷史記錄都是已包含在遠程master分支中的

相反,您需要使用該文件的舊版本創建一個新的提交。

# Make sure that you're back on the master branch first: 
git checkout master 

git checkout 123456 -- src/test.c 
git commit -m "Bringing back test.c from commit 123456" 
git push ab master 
+0

只是去顯示當人們假設發生了什麼... – 2011-03-29 14:41:43

0

123456您的文件名,或者你的提交哈希#:你可以做到這一點?由於您沒有提供文件名,我猜這是一個文件名,這意味着您檢出了上次提交的版本。假定提交已經被推送,那麼看起來合乎邏輯的是,所有內容都是最新的。

2

當你這樣做:

git checkout 123456 

你現在是在一個「detached HEAD」模式,這意味着你做不被HEAD引用的任何修改。
這就解釋了爲什麼git push會說「一切都是最新的」:你不在任何分支,所以你沒有進行任何修改。

但是,如果你遵循Markadvice做:

git checkout 123456 -- src/test.c 

您只修改工作樹給定文件,但你仍然在你的當前分支。
src/test.c將被修改,然後您可以添加它,並提交,移動HEAD您當前的分支。