2012-02-03 67 views
6

我在嘗試將文件恢復到之前的提交時遇到問題,我知道我可以使用git checkout恢復單個文件,但問題是我在該文件中有更改,我想保留,所以我想知道如何在前一個提交和當前HEAD之間爲單個文件做某種「合併」?我嘗試使用git reset sha-of-my-commit path/to/my/file,但它將以前的版本放在暫存區域中,同時保留我的工作目錄上的最新版本不確定如何在它之後合併這兩個文件。如何在不覆蓋當前更改的情況下將文件恢復到以前的版本?

我現在所做的只是git diff ..sha-of-my-commit path/to/my/file,只是複製/粘貼缺失的行,但我相信一定有更好的方法來做到這一點嗎?

回答

4

假設你指的是改變你的工作樹(未提交):

git stash 
git checkout previous-commit path/to/file 
git stash pop 

如果你犯了一些變化,那麼你仍然可以做到這一點,多一點的工作。假設您的歷史記錄如下所示:

- x - A - x - x - x - B - x - x (HEAD) 

您想要A版的版本以及B版的更改。那麼做到這一點:

git stash 
git checkout B path/to/file 
git stash 
git checkout A path/to/file 
git stash pop 
git stash pop 

注意,任何藏匿的應用程序,因爲它是一個梅爾熱操作,可能會導致合併衝突;在繼續之前,你當然應該解決這些問題!

+0

謝謝!我完全忘了'git stash' – javiervd 2012-02-03 23:04:05

相關問題