【问题标题】:How to revert a file to a previous version without overwriting current changes?如何在不覆盖当前更改的情况下将文件恢复到以前的版本?
【发布时间】:2012-02-26 05:23:44
【问题描述】:
我在尝试将文件恢复到以前的提交时遇到问题,我知道我可以使用 git checkout 恢复单个文件,但问题是我想保留该文件中的更改,所以我想知道如何在单个文件的先前提交和当前 HEAD 之间进行某种“合并”?我尝试使用git reset sha-of-my-commit path/to/my/file,但它会将以前的版本放在暂存区域,而将最新版本保留在我的工作目录中,不确定如何在它之后合并两个文件。
我现在所做的只是 git diff ..sha-of-my-commit path/to/my/file 并且只是复制/粘贴了缺失的行,但我相信一定有更好的方法来做到这一点吗?
【问题讨论】:
标签:
git
merge
git-checkout
git-reset
【解决方案1】:
假设您的意思是更改在您的工作树中(未提交):
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
请注意,任何存储应用程序,因为它是一个合并操作,可能会导致合并冲突;你当然应该在继续之前解决这些问题!