如何在不覆盖当前更改的情况下将文件还原到以前的版本?

时间:2012-02-03 15:38:50

标签: git merge git-checkout git-reset

我在尝试将文件还原到之前的提交时遇到问题,我知道我可以使用git checkout还原单个文件,但问题是我在该文件中有更改我要保留所以我想知道如何在单个文件的先前提交和当前HEAD之间进行某种“合并”?我尝试使用git reset sha-of-my-commit path/to/my/file,但它将以前的版本放在暂存区域,同时在我的工作目录中保留最新版本,不确定如何在它之后合并这两个文件。

我现在所做的只是git diff ..sha-of-my-commit path/to/my/file并且只是复制/粘贴了缺失的行,但我相信必须有更好的方法来做到这一点吗?

1 个答案:

答案 0 :(得分:5)

假设您的意思是更改位于工作树中(未提交):

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

请注意,任何存储应用程序,因为它是合并操作,都可能导致合并冲突;你当然应该在继续之前解决这些问题!