Ich bin sehr neu bei Git und versuche, die Commits aus einem Repository schrittweise durchzugehen. Anstatt die SHAs für jeden Commit zu kopieren und einzufügen, verwende ich diese Methode, um den nächsten Commit nach dem HEAD zu erhalten:
git checkout $(git rev-list HEAD..master | tail -n 1)
Das funktioniert perfekt, aber ich benutze es viel, also würde ich gerne die Syntax mit ein wenig aufräumen alias.
Erster Versuch
In einer idealen Welt würde eine Funktion namens „child-sha“ den Inhalt der gesamten Suche zurückgeben, sodass sie in Powershell so aufgerufen werden könnte:
git checkout child-sha
Wenn ich die Datei /.config öffne, kann ich den Befehl hinzufügen, indem ich den folgenden Abschnitt hinzufüge:
[alias]
child-sha = $(git rev-list HEAD..master | tail -n 1)
Aber wenn ich es ausführe, erhalte ich den folgenden Fehler
Erweiterung des Alias ’child-sha’ fehlgeschlagen; ‘$(git’ ist kein Git-Befehl
Zweiter Versuch
Okay, also keine Verwendung $()
. Wenn ich die Konfigurationsdatei wie folgt bearbeite:
[alias]
child-sha = rev-list HEAD..master | tail -n 1
Rufen Sie dann so an:
git checkout $(git child-sha)
Dann bekomme ich folgenden Fehler
schwerwiegend: mehrdeutiges Argument ‘|’: unbekannte Revision oder Pfad nicht im Arbeitsbaum
Dritter Versuch – Funktioniert, aber schlampig
Okay, also keine Verwendung der Pipe (|
). Wenn ich meine Konfigurationsdatei wie folgt aktualisiere:
git config --local alias.child-shas "rev-list HEAD..master"
Dann rufe ich so an:
get checkout $(git child-shas | tail -n 1)
Dann funktioniert es, aber ich habe nicht gespeichert das viel Platz.
Ich bin mir nicht sicher, was die einzelnen Funktionen im Skript tun, da ich mit Git- und Powershell-Befehlen im Allgemeinen wirklich neu bin. Google sucht nach den zu verwendenden Dokumenten $
oder |
oder tail
zeigen nichts Hilfreiches, da Sonderzeichen oft aus der Suche entfernt werden.
Gibt es eine Möglichkeit, diese Funktion abzukürzen?
In einer separaten Anfrage möchte ich wirklich jeden Checkout durchlaufen, damit ich zu diesem Zeitpunkt die gesamte Codebasis anzeigen kann, damit ich eine kleine Demo für eine Präsentation einrichten kann. Ich scheine nicht, als ob irgendein GUI-Editor (GitHub-Windows, gitkoder Visual Studio-Tools für Git) gibt Ihnen ganz einfach die Möglichkeit, einen bestimmten Commit auszuchecken; sagen wir zum Beispiel, indem Sie mit der rechten Maustaste durch die Liste der Commits klicken.
Versuchen Sie: child-sha = “!git rev-list HEAD..master | tail -n 1”
– Arkadiusz Drabczyk
15. Juni 2014 um 19:25 Uhr