Kam gerade über diese Frage und habe etwas hinzuzufügen
So gehen Sie zum letzten Commit:
git checkout $(git log --branches -1 --pretty=format:"%H")
Erläuterung:
git log --branches
Zeigt das Protokoll der Festschreibungen aller lokalen Zweige an und
-1
beschränkt sich auf ein Festschreiben. → Das neueste Festschreibungsformat ,
--pretty=format:"%H"
um nur die
git checkout $(...)
Festschreibungs- Hash- Ausgabe der Unterschale als Argument für das Auschecken anzuzeigen
Hinweis:
Dies führt jedoch zu einem abgetrennten Kopf (da wir direkt zum Commit auschecken). Dies kann vermieden werden, indem der Zweigname mit sed
(siehe unten) extrahiert wird.
So wechseln Sie zum Zweig des letzten Commits:
git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
Erläuterung:
git log --branches
Zeigt das Protokoll der Festschreibungen aller lokalen Zweige
-1
an. Begrenzt auf ein Festschreiben → Das neueste Festschreibungsformat
--pretty=format:"%D"
, um nur die Referenznamen anzuzeigen.
| sed 's/.*, //g'
Ignorieren Sie alle bis auf die letzte von mehreren Verweisen. (*)
git checkout $(...)
Verwenden Sie die Ausgabe der Unterschale als Argument für das Auschecken
*) HEAD- und Remote-Zweige werden zuerst aufgelistet, lokale Zweige werden zuletzt in alphabetisch absteigender Reihenfolge aufgelistet, sodass der verbleibende Name der alphabetisch erste Zweig ist
Hinweis:
Dies verwendet immer nur den (alphabetisch) ersten Zweignamen, wenn für dieses Commit mehrere vorhanden sind.
Wie auch immer, ich denke, die beste Lösung wäre nur, die Ref-Namen für das letzte Commit anzuzeigen, um zu wissen, wohin Sie auschecken müssen:
git log --branches -1 --pretty=format:'%D'
Erstellen Sie beispielsweise den Alias git top
für diesen Befehl.
git log
Satz Ihrer Frage können Sie immergit log --all
(oder nützlichergit log --oneline --graph --all
) laufen .