我做了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
是答案的一部分,但它与问题无关。
答案 0 :(得分:2)
您有几种选择:
最简单的方法是使用git reflog并检查您所使用的最新“好”提交。
您还可以使用其中任何一种来回到任何所需的提交。
HEAD
是什么? 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 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
这将检查指向所需提交的新分支
这是可以做什么的一般模式。