如何撤消“git撤消”

我做了一个git undo这根本不是我想要的。 任何现在我想知道如何撤销撤消AKA重做。

我想你想知道我想做什么:我想放弃本地更改(他们没有按预期工作),并回到最后承诺的状态。

更新问题1

一个git reset HEAD . 留给我:

 Auf Branch master Ihr Branch ist vor 'origin/master' um 2 Commits. (benutzen Sie "git push", um lokale Commits zu publizieren) Änderungen, die nicht zum Commit vorgemerkt sind: (benutzen Sie "git add/rm <Datei>...", um die Änderungen zum Commit vorzumerken) (benutzen Sie "git checkout -- <Datei>...", um die Änderungen im Arbeitsverzeichnis zu verwerfen) gelöscht: Pictures/KETTLER_Logo.svg.png gelöscht: Pictures/Withing_Logo.png gelöscht: app/src/main/java/com/krischik/fit_import/IMainActivity.java gelöscht: app/src/main/java/com/krischik/fit_import/IMainFragment.java geändert: app/src/main/java/com/krischik/fit_import/MainActivity.java geändert: app/src/main/java/com/krischik/fit_import/MainFragment.java geändert: app/src/main/kotlin/com.krischik/fit_import/GoogleFit.kt geändert: app/src/main/res/layout/main_fragment.xml gelöscht: app/src/main/res/menu/main_menu.xml geändert: app/src/main/res/values/dimens.xml geändert: app/src/main/res/values/strings.xml geändert: app/src/main/res/values/styles.xml geändert: lib/src/main/kotlin/com.krischik/fit_import/Ketfit.kt geändert: lib/src/main/kotlin/com.krischik/fit_import/Withings.kt geändert: lib/src/test/kotlin/com.krischik/fit_import/Ketfit_Test.kt geändert: lib/src/test/kotlin/com.krischik/fit_import/Withings_Test.kt geändert: src/main/scripts/Create-IC-Launcher.scala Unversionierte Dateien: (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken) app/src/main/res/anim-v21/ app/src/main/res/anim/ app/src/main/res/drawable-xxxhdpi/ app/src/main/res/values-de/ app/src/main/res/values-v21/ keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a") 

显然恢复到最后承诺的状态应该有一个干净的git status

更新可能的重复

我不知道有人可能会有这样的想法,即有可能重复,因为有关的行动没有任何共同之处:

  • git reset --hard HEAD更改工作副本以反映存储库。
  • git undo更改存储库以撤销上次提交。

所以,虽然git reset是答案的一部分,但与问题无关。

你有几个选择:

最简单的就是使用git reflog来检查你所在的最新“好”的提交。

您也可以使用其中的任何一个来回到任何需要的提交。

首先什么是头?

HEAD只是对当前分支中当前提交(最新)的引用。
在任何时候只能有一个HEAD

如果你不是最近的提交 – 这意味着HEAD指向历史上的一个事先提交的被称为分离的HEAD。

在这里输入图像描述

几个选项:

git checkout

 git checkout <commit_id> 

git reflog

您也可以随时使用reflog

 git reflog git checkout HEAD@{...} 

这会让你回到你想要的提交

在这里输入图像描述


git reset HEAD --hard <commit_id>

“移动”你的头回到所需的提交。

 # 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 2.7开始 )
    你也可以使用git rebase --no-autostash

git checkout

 git checkout -b <new branch> <commit_id> git checkout HEAD~X // x is the number of commits t go back 

这将检出指向所需提交的新分支


这是一个可以做什么的一般模式。

在这里输入图像描述