将更改重置为先前的提交,而不创建新的提交

时间:2012-12-23 21:39:12

标签: git github

  1. 我提交了更改,并开始处理新功能。
  2. 我意识到我搞砸了事情
  3. 需要恢复到之前的提交。
  4. 我做了什么。

    git add .
    git commit -m "Screwed Up"
    git branch -m experiment
    git checkout 62b5 (SHA1 of previous commit)
    git checkout -b master
    git branch -D experiment
    

    我认为必须有更好的方法来恢复之前的提交。

    当我尝试git reset HEAD时,当我执行git status时,它仍会显示未提交的更改。

    如果有更好的方法,那么它是什么?或者我应该使用不同的工作流程来避免这种情况吗?

2 个答案:

答案 0 :(得分:3)

您可以git reset --hard恢复之前的提交。

--hard将重置索引和工作树。自上次提交以来对工作树中跟踪文件的任何更改都将被丢弃。

答案 1 :(得分:1)

如果可能,请勿reset --hard。如果您有未跟踪或未分阶段的更改,则可以撤消。使用

git stash -u

安全。您将再次获得一个干净的工作目录。如果你错误地丢弃了你的更改,你总是可以通过git stash命令将它们恢复。

隐藏的更改不会被推高,所以它不会搞砸/膨胀其他回购,但会给你一点安全网。所以,如果你再次戒掉,你将失去你的存储。所以重新克隆以解决你的回购问题也是一个坏主意 - 你也可能失去你的rerere录音,reflog等。