2009-05-23 119 views
59

我最近向分支的頭部提交了一個文件,該文件中有錯誤。我需要做下面的事情:Git:檢出以前提交的文件並將其修改爲HEAD

  • 獲取從一個文件提交之前的HEAD

  • 提交該文件回HEAD

什麼的去了解,最好的方法是什麼?

+1

最簡單的將是複製文件內容從特定的提交使用ui客戶端(或從github bitbucket等),並將其粘貼到當前文件並提交:)比編寫散列和路徑更容易 – nawfal 2014-01-07 10:48:00

回答

91

你自己實際上是說:

首先得到該文件重新從一個提交前:

$> git checkout HEAD~1 path/to/file.ext 

然後將其提交:

$> git commit -a -m 'Retrieved file from older revision' 

如果僅僅是更改該文件如果出現在上次提交中,您甚至可以使用git-revert

$> git revert HEAD 

我認爲最好讓它成爲一個單獨的提交,因爲它可以準確地告訴你你已經恢復了什麼,以及爲什麼。但是,通過使用--amend切換到git-commit,可以將其壓縮到之前的提交中。

+0

--amend將是一個開關git提交,而不是git add – bdonlan 2009-05-23 01:38:22

0

要當心,在這種情況下:

Commit hash - File modified 
aaaaaaa  index.php 
bbbbbbb  test.php 
ccccccc  index.php 

的Git結賬HEAD〜1(或HEAD ^)的index.php嘗試籤index.php文件到以前的頭部hash(BBBBBBB),但是這不是真正的以前的提交散列文件是ccccccc。在前面的HEAD哈希中,index.php仍然保持不變,因爲最後一次更改是在哈希ccccccc中進行的。

要恢復一些文件上一次提交的哈希受影響的文件,使用:

git log -n 2 --pretty=format:%h path/to/file.ext 

忽略的第一個散列,然後在第二哈希值,則:

git checkout <second_hash> path/to/file.ext 
git commit -m 'Revert this file to real previous commit'