为了账号安全,请及时绑定邮箱和手机立即绑定

如何将Git存储库还原为以前的提交

如何将Git存储库还原为以前的提交

Git
翻阅古今 2019-05-22 15:19:19
如何将Git存储库还原为以前的提交如何从当前状态恢复为在某个提交时创建的快照?如果我这样做git log,那么我得到以下输出:$ git logcommit a867b4af366350be2e7c21b8de9cc6504678a61b`Author: Me <me@me.com>Date:   Thu Nov 4 18:59:41 2010 -0400blah blah blah...commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4Author: Me <me@me.com>Date:   Thu Nov 4 05:13:39 2010 -0400more blah blah blah...commit 0766c053c0ea2035e90f504928f8df3c9363b8bdAuthor: Me <me@me.com>Date:   Thu Nov 4 00:55:06 2010 -0400And yet more blah blah...commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50Author: Me <me@me.com>Date:   Wed Nov 3 23:56:08 2010 -0400Yep, more blah blah.如何从11月3日恢复提交,即提交0d1d7fc?
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这很大程度上取决于“恢复”的含义。


暂时切换到其他提交

如果你想暂时回到它,傻瓜,然后回到你所在的位置,你所要做的就是检查所需的提交:


# This will detach your HEAD, that is, leave you with no branch checked out:

git checkout 0d1d7fc32

或者,如果你想在那里做提交,那么在你做的时候继续做一个新的分支:


git checkout -b old-state 0d1d7fc32

要回到原来的位置,只需查看您再次访问的分支机构。(如果你做了更改,就像转换分支一样,你必须在适当的时候处理它们。你可以重置它们扔掉它们;你可以藏匿,结账,存放pop以带走它们;你可以提交如果你想在那里有一个分支,他们到那里的一个分支。)


硬删除未发布的提交

另一方面,如果你想真正摆脱自那时以来所做的一切,那么有两种可能性。一,如果您尚未发布任何这些提交,只需重置:


# This will destroy any local modifications.

# Don't do it if you have uncommitted work you want to keep.

git reset --hard 0d1d7fc32


# Alternatively, if there's work to keep:

git stash

git reset --hard 0d1d7fc32

git stash pop

# This saves the modifications, then reapplies that patch after resetting.

# You could get merge conflicts, if you've modified things which were

# changed since the commit you reset to.

如果你搞砸了,你已经抛弃了你当地的变化,但你至少可以通过再次重置来回到原来的位置。


使用新提交撤消已发布的提交

另一方面,如果您已发布作品,则可能不希望重置分支,因为这有效地重写了历史记录。在这种情况下,您确实可以还原提交。使用Git,revert有一个非常具体的含义:使用反向补丁创建一个提交以取消它。这样您就不会重写任何历史记录。


# This will create three separate revert commits:

git revert a867b4af 25eee4ca 0766c053


# It also takes ranges. This will revert the last two commits:

git revert HEAD~2..HEAD


#Similarly, you can revert a range of commits using commit hashes:

git revert a867b4af..0766c053 


# Reverting a merge commit

git revert -m 1 <merge_commit_sha>


# To get just one, you could use `rebase -i` to squash them afterwards

# Or, you could do it manually (be sure to do this at top level of the repo)

# get your index and work tree into the desired state, without changing HEAD:

git checkout 0d1d7fc32 .


# Then commit. Be sure and write a good message describing what you just did

git commit

git-revert手册页实际上涵盖在其描述中有很多这一点。另一个有用的链接是这个讨论git-revert的git-scm.com部分

如果您决定不想还原,则可以还原还原(如此处所述)或重置为还原之前(请参阅上一节)。

在这种情况下,您可能还会发现此答案很有用:
如何将HEAD移回以前的位置?(独立头)


查看完整回答
反对 回复 2019-05-22
?
慕神8447489

TA贡献1780条经验 获得超1个赞

将工作副本还原为最近的提交

要恢复到先前的提交,请忽略任何更改:


git reset --hard HEAD

其中HEAD是当前分支中的最后一次提交


将工作副本还原为较旧的提交

要恢复到比最近提交更早的提交:


# Resets index to former commit; replace '56e05fced' with your commit code

git reset 56e05fced 


# Moves pointer back to previous HEAD

git reset --soft HEAD@{1}


git commit -m "Revert to 56e05fced"


# Updates working copy to reflect the new commit

git reset --hard

Credits转到类似的Stack Overflow问题,在Git中恢复为SHA哈希的提交?


查看完整回答
反对 回复 2019-05-22
?
holdtom

TA贡献1805条经验 获得超10个赞

我和其他人的最佳选择是Git重置选项:

git reset --hard <commidId> && git clean -f

这对我来说是最好的选择!它简单,快速,有效!


注意: 如果您与拥有旧提交副本的其他人共享您的分支,则如评论中所述,请勿执行此操作

同样来自评论,如果你想要一个较少的'ballzy'方法,你可以使用

git clean -i


查看完整回答
反对 回复 2019-05-22
  • 3 回答
  • 0 关注
  • 837 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信