如何撤消“git undo”

时间:2016-01-11 17:26:01

标签: 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是答案的一部分,但它与问题无关。

1 个答案:

答案 0 :(得分:2)

您有几种选择:

最简单的方法是使用git reflog并检查您所使用的最新“好”提交。

您还可以使用其中任何一种来回到任何所需的提交。

首先,HEAD是什么?

HEAD只是对当前分支中当前提交(最新)的引用 在任何给定时间只能有HEAD

如果您没有进行最新提交 - 意味着HEAD指向历史记录中的先前提交,则称为已分离的HEAD。

enter image description here

几个选项:

git checkout

git checkout <commit_id>

git reflog

您也可以随时使用reflog

git reflog
git checkout HEAD@{...}

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

enter image description here

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.
  • 注意:(Since 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

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

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

enter image description here