Git lokalen Zweig löschen löschen


377

Ich habe gerade den falschen Zweig mit einigen experimentellen Änderungen gelöscht, die ich brauche git branch -D branchName.

Wie kann ich den Zweig wiederherstellen?


7
Ich bin froh zu wissen, dass ich nicht der einzige Lahme bin, der dies getan hat (und vergessen hat, regelmäßig eine Kopie
Ray

Antworten:


719

Sie können git reflog verwenden , um den SHA1 des letzten Commits des Zweigs zu finden. Ab diesem Punkt können Sie einen Zweig mit neu erstellen

git branch branchName <sha1>

Bearbeiten: Wie @seagullJS sagt, branch -Dsagt Ihnen der Befehl sha1. Wenn Sie das Terminal also noch nicht geschlossen haben, wird es ganz einfach. Dies löscht beispielsweise einen Zweig mit dem Namen master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git sagt Ihnen, was der SHA1 war, als der Zweig gelöscht wurde. Wenn Sie ihn also einfach löschen, sind es möglicherweise nur ein paar Zeilen in der Befehlszeile.
MöweJS

Wenn dieser Zweig auf dem Server vorhanden ist, können Sie alternativgit branch branchName origin/branchName
Florian Castellane

Außerdem habe ich Git Cherry-Pick <sha1> verwendet, um das Commit in den Zweig zu verschieben
Akin Okegbile

54

Wenn Sie den letzten SHA1 des Zweigs kennen, können Sie es versuchen

git branch branchName <SHA1>

Sie finden den SHA1 mit git reflog, wie in der Lösung hier beschrieben .


34

Wenn Sie die Löschung noch nicht gepusht haben, können Sie einfach Folgendes tun:

$ git checkout deletedBranchName

Diese Antwort lässt Git Extensions den Mund halten über "Der Zweig, den Sie pushen möchten, scheint ein neuer Zweig für diese Fernbedienung zu sein." Vielen Dank.
Omer

29

Wenn Sie gerade den Zweig gelöscht haben, wird in Ihrem Terminal Folgendes angezeigt:

Deleted branch branch_name(was e562d13)
  • Wenn e562d13 eine eindeutige ID ist (auch bekannt als "SHA" oder "Hash"), können Sie damit den gelöschten Zweig wiederherstellen.

Verwenden Sie zum Wiederherstellen des Zweigs:

git checkout -b <branch_name> <sha>

zum Beispiel :

git checkout -b branch_name e562d13 

4

Erstens: Sichern Sie Ihr gesamtes Verzeichnis, einschließlich des .git-Verzeichnisses.

Zweitens: Sie können verwenden git fsck --lost-found, um die ID der verlorenen Commits zu erhalten.

Drittens: Rebase oder Merge auf dem verlorenen Commit.

Viertens: Überlegen Sie immer zweimal, bevor Sie -D oder --force mit git verwenden :)

Sie können auch diese gute Diskussion darüber lesen, wie Sie diese Art von Fehler beheben können.

BEARBEITEN: Übrigens, laufen Sie nicht git gc(oder lassen Sie es nicht von selbst laufen - dh nicht laufen git fetchoder ähnliches), sonst verlieren Sie möglicherweise Ihre Commits für immer.


1
1 und 4 sind IMO Overkill.
JWG

Ja, deshalb verwenden wir Git, um nicht all das herumtragen zu müssen. Jede von Ihnen begangene Aktion steht Ihnen weiterhin zur Verfügung.
Mateor

4

Danke, das hat funktioniert.

Git-Zweig new_branch_name sha1

git checkout new_branch_name

// kann meine alten eingecheckten Dateien in meinem alten Zweig sehen


3

Folge diesen Schritten:

1: Geben Sie ein:

git reflog show 

Dadurch wird der gesamte Commit-Verlauf angezeigt. Sie müssen den sha-1 auswählen, der den letzten Commit enthält, den Sie zurückerhalten möchten

2: Erstellen Sie einen Filialnamen mit der von Ihnen ausgewählten Sha-1-ID , z. B.: 8c87714

git branch your-branch-name 8c87714

0

Das hat bei mir funktioniert:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.