【问题标题】: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
    

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

    【讨论】:

    • 谢谢!我完全忘记了git stash
    猜你喜欢
    • 2014-04-21
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2016-03-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多