Freitag, April 10, 2020

Bezugnehmend auf das Vorherige/nächste commit in git?

Habe ich gesehen, git-Befehle verwenden Sie eine syntax wie HEAD~, aber ich habe nicht in der Lage zu finden, diese syntax in der Git Referenz-Handbuch.

Hier ist, was ich verstanden habe: <commit>~<n> bezieht sich auf den commit – <n> Schritte früher als <commit> (wo <n> ist eine ganze Zahl), und commit~ bedeutet einfach, die gleiche ist und dass <n> implizit ist.

Nun, ist das richtig? In diesem Fall tut dies immer Arbeit? Was ist, wenn <commit> ist das Ergebnis einer merge zwischen zwei branches, die einen commit wird dann <commit>~ finden? Gibt es da eine entsprechende syntax für einen Verweis auf den nächsten commit oder commit <n> Schritte später?

InformationsquelleAutor HelloGoodbye | 2013-04-17

3 Kommentare

  1. 19

    Haben Sie eine sehr klare Erklärung, wie das funktioniert, wird im Kapitel Acenstry Referenzen in Pro Git:

    • ~ wird verwendet, um die ersten Eltern.
    • ^ können verwendet werden, um die anderen Eltern (^2zum Beispiel für einen merge).

    Aber Sie don ‚ T haben eine einfache Möglichkeit zum verweisen auf den nächsten commit, auch wenn es gibt noch kompliziertere Wege, um es zu bekommen.

    • Danke. Das Referenz-Handbuch war offenbar nicht der richtige Ort, um zu schauen — ich dachte, es würde decken Git ‚ s syntax als gut.
  2. 14

    Einfach eine Antwort auf die Frage aus dem Titel (denn das ist, was mich hier von Google):

    Zur Kasse vorherigen commit:

    git checkout HEAD^
    

    Zur Kasse, der nächste commit (vorausgesetzt es gibt keine Verzweigungen):

    git checkout `git log --reverse --ancestry-path HEAD..master | head -n 1 | cut -d \  -f 2`
    
  3. 6

    Inspiriert von @cexbrayat Antwort, ich finde es nützlich, denken Sie an es auf diese Weise:

    Wie Sie beziehen sich auf etwas in einem commit der Abstammung, denen ein commit kann mehrere Eltern:

    • ^n gibt an, welcher Elternteil

    • ~n gibt an, welche generation

    Beide standardmäßig auf ein.

    • Das ist eine ziemlich gute Regel 🙂 Obwohl es bricht, wenn weder ^n noch ~n angegeben ist.
    • Bleibt also nur noch die commit-hash selbst, bezieht sich das auf.. sich selbst. Ich glaube, ich sollte angegeben haben, dass eine commit-hash sollten ebenso dabei sein. Ist es das, was du meinst?
    • Ich denke mal du meinst, dass Sie standardmäßig auf, wie Argumente an eine Funktion in der Programmierung können die Standardwerte haben wenn Sie nicht geben Sie Ihnen? Ich denke, dass, wenn Sie haben eine Funktion, die sowohl die Erzeugung und die Eltern und gibt eine commit-Referenz, und wenn Sie nicht geben Sie alle von Ihnen, Sie müssen nur die commit-Sie beginnen mit. Also in diesem Fall die generation wäre 0, obwohl Sie nicht angeben, welche generation. Obwohl ich merke, dass die Eltern wirklich nur dann relevant, wenn die generation 1, also die zwei, die haben so eine Funktion nicht so viel Sinn machen.
    • In anderen Worten, ist der Standardwert der generation wäre 0, wenn Sie nicht angeben, welcher Elternteil.
    • Naja, was ich damit meine „default to one‘: Betrachten Sie den Ausdruck ‚<SHA1 – >^‘. Es ist kein bestimmter Wert gegeben, für die Eltern, die Sie bedeuten, so die ersten Eltern zurückgegeben. Dasselbe mit ‚<SHA1 – >~‘. Wird keine Zahl angegeben, also der ersten generation ist, was es wirkt auf.

Kostenlose Online-Tests