2010-09-14 84 views
2

問題如下:如何從git中的先前提交中提取幾個文件?Git:如何將工作文件重置爲其索引版本?

我能得到這些文件逐一和他們的老版本替換它們:

git show <commit>:<path> >! path 

不過,我想知道是否有與git reset執行同樣的事情,有可能以不同的方式。

其實,據我瞭解,

git reset <commit> <path> 

把舊的文件到索引。但是如何將索引中的文件移回工作樹?或者這是一個不好的方法?

PS:有一個很好的圖形解釋,使一切都清楚:http://marklodato.github.com/visual-git-guide/

+0

您正在尋找['git reset --hard'](http://www.kernel.org/pub/software/scm/git/docs/git-reset.html)。但'reset --hard'在整棵樹上工作 - 它無法退出單個文件的更改。 – Dummy00001 2010-09-14 13:21:02

回答

5

爲了把文件從一個特定的修訂到索引和工作樹都一步到位,檢查出來:

git checkout <commit> <path> 

如果你已經把它只有到索引,使用git reset <commit> <path>,那麼沒有必要指定一個承諾:

git checkout <path> 

也就是說,在默認情況下,從指數git checkout <path>份工作的樹,但如果提供了一個版本參數,它會從那裏複製到指數第一。

2

你看過「git checkout」命令嗎?例如。從舊

git checkout master~2 Makefile 

檢查出來的文件(Makefile文件)提交,這是我的理解,你想做的事情。然後,您可以決定是否使用「git add」將它添加到索引中。

1

通過git checkout HEAD~1 -- $FILENAME可以更輕鬆地檢出您上次提交之前的版本,將HEAD~1替換爲rev-ID或用於其他修訂的標記。


編輯實際上有 git-checkout-index,所以你可以使用 git checkout-index $FILENAME


EDIT2您可能需要使用 -f開關,即 git checkout -f -- $FILENAME--告訴git你的意思是一個文件(只有當你有一個同名的分支或標籤時才需要)。

+2

'git checkout '(沒有指定修訂版)無論如何都會從索引中檢出。 'checkout-index'更像是一個管道(低級)命令。 – Cascabel 2010-09-14 18:10:32

+0

@Jeromi:謝謝,我忘了那個...... – 2010-09-15 08:40:12

+0

即使checkout-index是較低級別,也很好了解它。謝謝! – EOL 2010-09-15 08:54:20

相關問題