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?

Stefan Kendall
quelle
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
bobDevil
quelle
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 .

Chetan
quelle
34

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

$ git checkout deletedBranchName
Amichaud
quelle
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 
Freiberufler
quelle
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.

Cameron Skinner
quelle
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

Rajeev Jayaswal
quelle
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
Grünkäse
quelle
0

Das hat bei mir funktioniert:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Alej priv
quelle