Warum sieht mein Git-Verlauf wie ein Weihnachtsbaum aus?

Lesezeit: 2 Minuten

Beim machen git log --decorate --oneline --graph In einem unserer Repositorien fanden wir kurz vor Weihnachten, dass die folgende Struktur erschienen war (rotiert, um das schwache festliche Thema zu betonen):

redigierte Git-Log-Ausgabe, gedreht, um wie ein Weihnachtsbaum auszusehen

Wie ist dieses Muster im Commit-Graph entstanden?

Das ist natürlich absichtlich etwas albern, aber hier gibt es einen interessanten Punkt – es ist oft schwierig zu erkennen, wie bestimmte Muster im Commit-Graph zu interpretieren sind, wenn Sie sie in Ihrem Git-Verlaufsbrowser sehen.

  • “Als nächstes: Warum sieht mein Arbeitsbaum aus wie ein Weihnachtsbaum?”

    – Bernstein

    24. Dezember 2012 um 16:29 Uhr


  • “Als Nächstes: Warum sieht mein Weihnachtsbaum aus wie eine Git-Geschichte?”

    – Keith Thompson

    24. Dezember 2012 um 17:45 Uhr

  • Ein Weihnachtsbaum wäre nicht komplett ohne ein paar Sterne… * * *

    – ADTC

    18. November 2017 um 23:27 Uhr


In diesem Fall war die Situation so, dass an der Spitze von ein nicht gepushter Commit vorhanden war master Branch in einem Klon des Repositorys. Dann git pull wurde viele Male im selben Repository ausgeführt, über einen Zeitraum, in dem viele neue Arbeiten im Upstream durchgeführt wurden. (In diesem Fall ist es aufgrund eines automatisierten Skripts passiert, aber das Gleiche kann passieren, wenn ein Entwickler einfach wiederholt in einen Zweig zieht, um ihn auf dem neuesten Stand zu halten, anstatt, sagen wir, ein Rebasing durchzuführen.)

Jeder Pull, wenn es neue Commits im Upstream gab, erzeugte einen neuen Merge-Commit, da immer ein Commit drin war master das war nicht drin master stromaufwärts.

Schließlich wurde der Verlauf aus dem Master-Branch in diesem Repository nach oben gepusht, sodass andere Entwickler sahen, wie diese Struktur im Commit-Diagramm plötzlich auftauchte, als sie das nächste Mal aus dem Upstream-Repository zogen.

Wenn Sie einen Verlauf mit einer ähnlichen Struktur haben und herausfinden möchten, welcher Commit / Entwickler dieses Problem verursacht hat, können Sie einfach die Zeile mit den Sternen hinuntersehen (im Grunde nach dem ersten übergeordneten Element jeder Zusammenführung), bis Sie dazu gelangen der erste Nicht-Merge-Commit. In dem Fall auf dem Bild war das so b275805 – der Commit, der früher hätte gepusht werden sollen.

Dies ist ein Grund, warum Menschen es oft vorziehen, es zu verwenden git pull --rebase – es hält Ihren nicht gepushten Verlauf einfach.

Ehre zu erweisen, wo es gebührt, mein Kollege Matthäus Somerville erkannte dies und arbeitete heraus, was los war.

  • Exzellent. +1. Ich war mir nur des potenziellen Problems eines bewusst pull --rebase (stackoverflow.com/questions/2590260/…), aber hier würde das wirklich helfen.

    – VonC

    24. Dezember 2012 um 16:30 Uhr

1311040cookie-checkWarum sieht mein Git-Verlauf wie ein Weihnachtsbaum aus?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy