2012-02-03 69 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

相关问题