Sie können nicht genau das tun. History in git ist ein gerichteter azyklischer Graph - jedes Commit enthält Verweise auf seine Eltern, aber Eltern haben keine Referenzen auf ihre Kinder.
Das Problem hier sollte offensichtlich werden, wenn Sie an ein Commit denken, von dem Sie mehrere Zweige erstellt haben. Welches "nächste Commit" meinst du? Mit Eltern können Sie eine Nummer angeben (ein normales Zusammenführungs-Commit hat ein erstes und zweites Elternteil), aber wie machen Sie das mit Kindern? Selbst wenn Sie wissen, was Sie Zweig auf sein bist versuchen (zB Sie haben master~4
ausgecheckt und jetzt wollen Sie bei master~3
suchen), ist es nicht gut definiert - Sie in einer Situation wie dieser sein könnte:
- X (HEAD) - o - o - o - Y (master)
\ /
o - o - o ----------
das heißt, in einfachen Fällen, könnten Sie so etwas tun:
git checkout $(git rev-list HEAD..master | tail -n 1)
das wird klar mit linearen Geschichte gut funktionieren. Mit merges ... rev-list
arbeitet von Gegenwart zu Vergangenheit in der Geschichte, nach rückwärts. Ich glaube, es folgt der erste Elternteil zuerst, so dass die zuletzt gedruckte Sache das Festschreiben nach HEAD
ist, indem man allen letzten Eltern folgt.
Edit: Das setzt voraus, dass Sie wissen, in welchen Zweig Sie sich vorwärts bewegen möchten. Wenn nicht ... na ja, sie ist so ziemlich fest auf allen Refs für Commits suchen, die den aktuellen HEAD als Elternteil haben - wahrscheinlich greppen die Ausgabe von git rev-parse
:
git rev-list --all --children | grep ^$(git rev-parse HEAD)
dann die anderen SHA1 greifen aus die Linie (benutze awk, was auch immer). Sie müssen manuell überprüfen oder eine willkürliche Wahl treffen, wenn es mehrere Ergebnisse gibt ...
Wollen Sie wirklich das Gegenteil von HEAD^oder nur eine Möglichkeit, "zurück" zu gehen?(Sie können mit HEAD @ {1} zurück zu vorherigen HEADS gehen.) – nschum