Ich mache ein git bisect
und nachdem ich zu dem problematischen Commit gekommen bin, versuche ich jetzt, einen Schritt vorwärts / rückwärts zu machen, um sicherzustellen, dass ich im richtigen bin.
Ich weiß HEAD^
, dass ich in der Geschichte rückwärts gehen muss, aber gibt es eine andere Abkürzung, um mich vorwärts zu bringen (in Richtung eines bestimmten Commits in der Zukunft), wie folgt:
A - B - C(HEAD) - D - E - F
Ich weiß, dass mein Ziel F ist und ich möchte von C nach D wechseln .
HINWEIS: Dies ist kein Duplikat von Git: Wie man zwischen Commits hin und her wechselt , meine Frage ist etwas anders und wird dort nicht beantwortet
git checkout -b new_branch HEAD~4
4 Commits von HEAD wie in stackoverflow.com/a/4940090/911945Antworten:
Ich habe ein bisschen experimentiert und dies scheint den Trick zu tun, um vorwärts zu navigieren ( Bearbeiten : Es funktioniert nur dann gut, wenn Sie einen linearen Verlauf ohne Zusammenführungs-Commits haben):
Wo
towards
ist ein SHA1 des Commits oder ein Tag.Erläuterung:
$()
bedeutet: Holen Sie sich alle Commits zwischen currentHEAD
undtowards
commit (ausgenommenHEAD
) und sortieren Sie sie in der Rangfolge (wiegit log
standardmäßig in - anstelle der chronologischen Reihenfolge, für die seltsamerweise die Standardeinstellung istrev-list
), und nehmen Sie dann die letzte (tail
), dh die, zu der wir gehen wollen.git checkout
, um eine Prüfung durchzuführen.Sie können eine Funktion definieren, auf die als Parameter erwartender Alias in Ihrer
.profile
Datei zugegriffen werden kann, um vorwärts zum jeweiligen Commit zu navigieren:quelle
git log
Zeigt Commits standardmäßig in chronologischer Reihenfolge anrev-list
, außer bei Verwendung des--graph
Flags.Alles, was Sie brauchen, um einen klaren, nicht abgelösten Kopfzustand zu erhalten, ist das Zurücksetzen und nicht das Auschecken.
quelle
git reset "HEAD@{1}"
in bestimmten Muscheln wie Fisch und Powershell ..git reflog
kann auch nützlich sein, um das richtige Commit zu finden.git reset HEAD
ich zurückgegangen, wo ich war ... jetzt habe ich keine Ahnung, in welchem Zustand sich mein Repository befindet und alles ist beängstigend. Was sollte ich jetzt tun?Ich glaube, Sie können tun:
Um ein Commit rechtzeitig voranzutreiben. Verwenden Sie HEAD @ {2}, HEAD @ {3} usw., um mehrere Commits fortzusetzen.
quelle
Dies ist, was ich benutze, um hin und her zu navigieren.
Übergang zum nächsten Commit
Übergang zum vorherigen Commit
quelle
git checkout <current branch>
das neueste Commit angehängt.git checkout -b <new-branch-name>
vom aktuellen Commit erlaubt Änderungen in neuem Zweig.git rebase -i
funktioniert auch. Außerdem habe ich meinen()
Funktion so benanntnx()
, dass Konflikte mit dem Node Version Manager "n" vermieden werden. Stellen Sie sicher, dass Sie die Aliase überprüfen!Angenommen, F ist das letzte Commit für
trunk
(geben Sie hier Ihren eigenen Filialnamen ein) ... Sie können es alstrunk~0
(oder nurtrunk
), E alstrunk~1
, D alstrunk~2
usw. bezeichnen.Schauen Sie in Ihrem Reflog nach, wie Sie Commits benennen können.
quelle
F
, dass Sie einen Zweig namens "Trunk" haben, auf den Sie verweisen , und dass Sie wissen, wohin in der Geschichte dieses Zweigs Sie wechseln möchten. Es wird nicht versucht, sich relativ zum KOPF vorwärts zu bewegen, sondern relativ zum Rumpf weniger weit hinten.trunk~2
A?trunk
und Ihr StromHEAD
identisch sind, was in der Frage nicht gezeigt wird, was ich angegeben habe, ist nicht das, was ich annehme, und was auf halbem Weg durch einenbisect
Das Rückwärtsfahren ist trivial, da Sie sich den Baum hinunterbewegen und es immer einen Weg gibt
Wenn Sie vorwärts gehen, bewegen Sie sich den Baum hinauf, sodass Sie genau angeben müssen, auf welchen Zweig Sie abzielen:
Verwendung :
git down
,git up <branch-name>
quelle
HEAD^
ist jedoch normalerweise ein vernünftiger Standard.Wenn Sie voraussehen möchten, können Sie diesen Trick ausführen, da Git keinen strengen Befehl dafür hat.
Beispiel
Liste der Protokollverlaufs-Hashes:
mit dem Befehl
git log --reverse C..
, in der Ausgabe sehen Sie , B und A .quelle
Wahrscheinlich nicht der schönste Weg, aber Sie können
git log
die Liste der Commits anzeigen und danngit checkout [sha1 of D]
zu D wechseln.quelle
Ich habe gerade einen Test gemacht. Sagen Sie zum Beispiel, Sie befinden sich in der Hauptniederlassung. Dann tun Sie:
Der Kopf löst sich also und Sie können es erneut versuchen, um zu einem anderen Commit zu gelangen:
Sobald Sie sich umgesehen haben, können Sie zu Ihrem ursprünglichen Zustand zurückkehren, indem Sie einfach zu diesem Zweig auschecken. In meinem Beispiel: Hauptzweig
Wenn Sie nicht in den ursprünglichen Zustand zurückkehren möchten und daher eines der Commits als Kopf behalten und von dort aus fortfahren möchten, müssen Sie von dort aus verzweigen. Zum Beispiel nach "git checkout HEAD @ {4}" können Sie eine Ausgabe durchführen
quelle
Um dieses Problem zu umgehen, können Sie einfach mit zu HEAD zurückkehren
Wechseln Sie dann zu dem Commit, mit dem Sie möchten
quelle
Wenn Sie vs-Code verwenden, ist der Git-Verlauf ein fantastisches Plugin, mit dem Sie Commits effizient anzeigen und deren Inhalt im Editor selbst überprüfen können. Überprüfen Sie den Link
quelle
wo:
branchName
entspricht dem FilialnamencommitInOrder
entspricht einem Commit in der Reihenfolge vom allerersten Commit in dem ausgewählten Zweig (also 1 ist das allererste Commit, 2 ist das zweite Commit im Zweig usw.)quelle