Was bedeutet Squashing Commits in Git? Wie quetsche ich Commits in Github?
Ich bin neu bei Git und habe darum gebeten, einem Newcomer-Fehler im Coala-Analyzer zugewiesen zu werden. Ich habe den Fehler behoben und wurde nun gebeten, meine Commits zu quetschen. Wie mache ich es?
Antworten:
Sie können sich Git als erweiterte Datenbank mit Snapshots Ihrer Arbeitsverzeichnisse vorstellen.
Eine sehr schöne Funktion von Git ist die Möglichkeit, den Verlauf von Commits neu zu schreiben.
Der Hauptgrund dafür ist, dass ein Großteil dieses Verlaufs nur für den Entwickler relevant ist, der ihn generiert hat. Daher muss er vereinfacht oder verbessert werden, bevor er an ein freigegebenes Repository gesendet wird.
Das Quetschen eines Commits bedeutet aus idiomatischer Sicht, die in diesem Commit eingeführten Änderungen in das übergeordnete Commit zu verschieben, sodass Sie ein Commit anstelle von zwei (oder mehr) erhalten.
Wenn Sie diesen Vorgang mehrmals wiederholen, können Sie n Commit auf einen einzigen reduzieren .
Wenn Sie Ihre Arbeit mit dem Commit-Tag Start begonnen haben , möchten Sie dies visuell
Möglicherweise stellen Sie fest, dass das neue Commit einen etwas dunkleren Blauton aufweist. Dies ist beabsichtigt.
In Git wird Squashing mit einer Rebase in einer speziellen Form namens Interactive Rebase erreicht .
Wenn Sie eine Reihe von Commits in einen Zweig B umwandeln , wenden Sie vereinfacht alle Änderungen an, die durch diese Commits vorgenommen wurden, beginnend mit B anstelle ihres ursprünglichen Vorfahren.
Ein visueller Hinweis
Beachten Sie noch einmal die verschiedenen Blautöne.
Mit einer interaktiven Rebase können Sie auswählen, wie Commits neu basiert werden sollen. Wenn Sie diesen Befehl ausführen:
Am Ende erhalten Sie eine Datei, in der die festgeschriebenen Commits aufgeführt sind
Ich habe die Commits nicht benannt, aber diese vier sollen die Commits von Start bis Head sein
Das Schöne an dieser Liste ist, dass sie bearbeitet werden kann .
Sie können Commits weglassen oder sie quetschen .
Alles was Sie tun müssen, ist das erste Wort in Squash zu ändern .
Wenn Sie den Editor schließen und keine Zusammenführungskonflikte gefunden werden, erhalten Sie diesen Verlauf:
In Ihrem Fall möchten Sie nicht auf einen anderen Zweig zurückgreifen, sondern auf einen vorherigen Commit.
Um den Verlauf wie im ersten Beispiel gezeigt zu transformieren, müssen Sie so etwas wie ausführen
Ändern Sie die "Befehle" in " Squash" für alle Commits außer dem ersten und schließen Sie dann Ihren Editor.
Hinweis zum Ändern des Verlaufs
In Git werden Commits niemals bearbeitet. Sie können beschnitten, nicht erreichbar gemacht, geklont, aber nicht verändert werden.
Wenn Sie die Basis neu festlegen, erstellen Sie tatsächlich neue Commits.
Die alten sind für Schiedsrichter nicht mehr erreichbar, werden also nicht in der Geschichte angezeigt, sind aber immer noch da!
Dies ist, was Sie tatsächlich für eine Rebase erhalten:
Wenn Sie sie bereits irgendwohin geschoben haben, wird durch das Umschreiben des Verlaufs tatsächlich ein Zweig erstellt!
quelle
man git rebase
: Die vorgeschlagene Festschreibungsnachricht für die gefaltete Festschreibung ist die Verkettung der Festschreibungsnachrichten der ersten Festschreibung und derjenigen mit dem Befehl "Squash"git diff
kann Ihnen helfen zu zeigen, was passiert ist.Der Rebase-Befehl bietet einige fantastische Optionen im
--interactive
(oder-i
) Modus, und eine der am häufigsten verwendeten ist die Fähigkeit, Commits zu quetschen. Dies führt dazu, dass kleinere Commits zu größeren zusammengefasst werden. Dies kann hilfreich sein, wenn Sie die Arbeit des Tages abschließen oder Ihre Änderungen nur anders verpacken möchten. Wir werden darüber nachdenken, wie Sie dies einfach tun können.Ein Wort der Vorsicht: Tun Sie dies nur bei Commits, die nicht in ein externes Repository verschoben wurden. Wenn andere auf den Commits basieren, die Sie löschen möchten, können viele Konflikte auftreten. Schreiben Sie Ihren Verlauf nur nicht neu, wenn er mit anderen geteilt wurde.
Nehmen wir also an, Sie haben gerade ein paar kleine Commits gemacht und möchten daraus ein größeres Commit machen. Die Geschichte unseres Repositorys sieht derzeit folgendermaßen aus:
Die letzten 4 Commits wären viel glücklicher, wenn sie zusammengepackt würden. Lassen Sie uns genau das durch interaktives Rebasing tun:
Hier sind also ein paar Dinge passiert. Zuerst sagte ich Git, dass ich mit den letzten vier Commits, von denen aus sich HEAD mit HEAD ~ 4 befindet, eine Rebase erstellen wollte. Git hat mich jetzt in einen Editor mit dem obigen Text und einer kleinen Erklärung dessen, was getan werden kann, versetzt. Auf diesem Bildschirm stehen Ihnen zahlreiche Optionen zur Verfügung, aber im Moment werden wir nur alles in einem Commit zusammenfassen. Wenn Sie also die ersten vier Zeilen der Datei in diese ändern, reicht dies aus:
Grundsätzlich weist dies Git an, alle vier Commits zum ersten Commit in der Liste zu kombinieren. Sobald dies erledigt und gespeichert ist, wird ein anderer Editor mit den folgenden Optionen angezeigt:
Da wir so viele Commits kombinieren, können Sie mit Git die Nachricht des neuen Commits basierend auf den übrigen am Prozess beteiligten Commits ändern. Bearbeiten Sie die Nachricht nach Belieben, speichern Sie sie und beenden Sie sie. Sobald dies erledigt ist, wurden Ihre Commits erfolgreich gequetscht!
Und wenn wir uns die Geschichte noch einmal ansehen ...
Das war bisher relativ schmerzlos. Wenn Sie während der Rebase auf Konflikte stoßen, sind diese normalerweise recht einfach zu lösen und Git führt Sie so weit wie möglich durch. Die Grundlagen hierfür sind, den fraglichen Konflikt,
git add
die Datei, zu beheben und danngit rebase --continue
den Vorgang fortzusetzen.git rebase --abort
Wenn Sie a ausführen, kehren Sie natürlich zu Ihrem vorherigen Zustand zurück, wenn Sie möchten. Wenn Sie aus irgendeinem Grund ein Commit in der Rebase verloren haben, können Sie das Reflog verwenden, um es zurückzubekommen.Details finden Sie unter diesem Link .
quelle
Es bedeutet, mehrere Commits zu einem zu kombinieren. Schauen Sie sich an:
https://ariejan.net/2011/07/05/git-squash-your-latests-commits-into-one/
Squash meine letzten X Commits zusammen mit Git
quelle