Bevor wir antworten, fügen wir einige Hintergrundinformationen hinzu und erklären, was dies ist HEAD
. da einige der folgenden Optionen zu einem abgenommenen Kopf führen
First of all what is HEAD?
HEAD
ist einfach ein Verweis auf das aktuelle Commit (aktuell) in der aktuellen Verzweigung.
Es kann immer nur eine einzige HEAD
geben. (ausgenommen git worktree
)
Der Inhalt von HEAD
wird darin gespeichert .git/HEAD
und enthält die 40 Bytes SHA-1 des aktuellen Commits.
detached HEAD
Wenn Sie sich nicht im letzten Commit befinden, bedeutet dies, dass HEAD
auf ein vorheriges Commit in der Geschichte verwiesen wird detached HEAD
.
In der Befehlszeile sieht es so aus: SHA-1 anstelle des Zweignamens, da der HEAD
nicht auf die Spitze des aktuellen Zweigs zeigt
Einige Optionen zur Wiederherstellung nach einem abgetrennten KOPF:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Dadurch wird ein neuer Zweig ausgecheckt, der auf das gewünschte Commit verweist.
Dieser Befehl checkt zu einem bestimmten Commit aus.
An diesem Punkt können Sie einen Zweig erstellen und ab diesem Punkt mit der Arbeit beginnen.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Sie können das auch immer verwenden reflog
.
git reflog
zeigt jede Änderung an, die das aktualisiert hat, HEAD
und das Auschecken des gewünschten Reflog-Eintrags setzt HEAD
diesen Commit zurück.
Jedes Mal, wenn der KOPF geändert wird, wird ein neuer Eintrag in der reflog
git reflog
git checkout HEAD@{...}
Dadurch kehren Sie zu Ihrem gewünschten Commit zurück
"Bewegen" Sie Ihren HEAD zurück zum gewünschten Commit.
# 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.
- Hinweis: ( Seit Git 2.7 ) können
Sie auch das verwenden git rebase --no-autostash
.
"Rückgängig machen" des angegebenen Commits oder Commit-Bereichs.
Der Befehl zum Zurücksetzen "macht" alle Änderungen rückgängig, die im angegebenen Commit vorgenommen wurden.
Ein neues Commit mit dem Undo-Patch wird festgeschrieben, während das ursprüngliche Commit ebenfalls im Verlauf verbleibt.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Dieses Schema zeigt, welcher Befehl was tut.
Wie Sie dort sehen können, reset && checkout
ändern Sie die HEAD
.