Zum Inhalt springen
GitTree
Geschichte und Genesung

Squash-Commits

Squashing kombiniert mehrere Commits zu einem, wie ein fixup oder squash in git rebase -i. In GitTree öffnet jeder Squash zuerst den Squash-Dialog: Er zeigt die ausgeführten Commits, das Ergebnis, die Nachricht und wer die Gutschrift erhält, und bis zur Bestätigung ändert sich nichts. Ihre nicht festgeschriebene Arbeit wird nie berührt und Undo setzt die Festschreibungen zurück.

KostenlosAktualisiert

Funktioniert in GitTree Kostenlos: alle lokalen Git-Funktionen, sobald Sie angemeldet sind.

Auf dieser Seite
  1. Bevor Sie beginnen
  2. Wo es zu finden ist
  3. Schritte
  4. Erwartetes Ergebnis
  5. Möglichkeiten zum Squash
  6. Commits, die Sie bereits gepusht haben
  7. Fixup-Commits für später
  8. Squash-Merges behalten ihre Autoren
  9. Einstellungen
  10. Wenn etwas schief geht
  11. Fragen
  12. Verwandt

Bevor Sie beginnen

  • Die Commits befinden sich in einer ununterbrochenen Zeile in dem Zweig, den Sie ausgecheckt haben. Eine Auswahl kann keinen Merge-Commit enthalten; Squash Branch… kann.
  • Gequetschte Commits und alle darüber liegenden Commits erhalten neue IDs. Wenn Sie sie bereits gedrückt haben, benötigen Sie anschließend einen Kraftschub. Der Verlauf, den ein anderer Remote-Zweig enthält, kann hier nicht gestaucht werden.

Wo es zu finden ist

  • Wählen Sie zwei oder mehr Commits im Diagramm aus (Umschalt-Klick für einen Bereich), klicken Sie mit der rechten Maustaste: Squash Commits….
  • Klicken Sie mit der rechten Maustaste auf einen Commit: Edit History › Squash into Parent… oder Fixup into Parent….
  • Klicken Sie mit der rechten Maustaste auf den ausgecheckten Zweig im Diagramm oder im linken Bereich: Squash Branch….
  • Halten Sie Alt (⌥ auf einem Mac) gedrückt und ziehen Sie einen Commit auf den Commit direkt darüber oder darunter.
  • Klicken Sie mit der rechten Maustaste auf ein Commit: Edit History › Create Fixup Commit…, um das zu committen, was als Fixup dafür vorgesehen ist.
  • Alle davon sind auch in der Befehlspalette und auf der Karte Squash des Funktionshandbuchs enthalten.
AktionmacOSWindows und Linux
Squash Commits… für die Auswahl⌥SAlt+S
Squash into Parent… für den ausgewählten Commit⌥QAlt+Q
Squash Branch… für den ausgecheckten Zweig⌥⇧BAlt+Shift+B
Undo der Kürbis⌘ZCtrl+Z

Schritte

  1. Öffnen Sie den Squash-Dialog

    Verwenden Sie einen beliebigen Eintrag oben. Der Dialog ist nach dem benannt, was Sie quetschen, zum Beispiel Squash 3 Commits, Squash a1b2c3d into Its Parent oder Squash Branch feature/login. Die zusammenfassende Zeile lautet wie folgt: „Aus 3 Commits werden 1 · 12 Dateien · +240 −31 · Adas Urheberschaft bleibt erhalten“.

  2. Überprüfen Sie die Commits, die funktionieren

    Commits that fold listet die ältesten zuerst unter Result auf: ein Commit, das vom Autor des ältesten geschrieben wurde. Für Squash Branch… zeigt Base: an, wo der Zweig seine Basis verlassen hat; Mit Change… können Sie einen weiteren Branch, ein Tag oder ein Commit eingeben und der Plan wird erneut erstellt.

  3. Wählen Sie die Nachricht

    Wählen Sie unter Start the message from Combine Messages, Oldest Message, Newest Message, List of Commits oder Write My Own aus und bearbeiten Sie dann den Text nach Ihren Wünschen. Eine Zusammenfassungszeile ist erforderlich.

  4. Behalten Sie die Nennung der anderen Autoren bei

    Wenn andere Leute einige der Commits geschrieben haben, fügt Credit the other authors (Co-authored-by) für jeden von ihnen eine Co-authored-by-Zeile hinzu. Die hinzugefügten Zeilen werden darunter aufgelistet; Deaktivieren Sie das Häkchen, um sie wegzulassen.

  5. Lesen Sie, was sich sonst noch ändert, und dann Squash

    What else changes gibt an, wie viele der oben genannten Commits neue IDs erhalten (ihre Änderungen bleiben gleich) und welche anderen Zweige oder Tags die alten Commits behalten. Drücken Sie die Bestätigungstaste, z. B. Squash 3 Commits oder Squash into Parent.

Erwartetes Ergebnis

GitTree sagt zum Beispiel 3 commits squashed into a1b2c3d. mit einer Undo-Schaltfläche, und die Grafik zeigt einen Commit, wo es mehrere gab.

Ihre bereitgestellten und nicht bereitgestellten Änderungen und nicht verfolgten Dateien sind genau so, wie sie waren: Der Squash berührt niemals den Arbeitsbaum.

Möglichkeiten zum Squash

Was jeder Kürbis faltet
BefehlWas klappt
Squash Commits…Die von Ihnen ausgewählten Commits, zwei oder mehr nebeneinander im ausgecheckten Zweig.
Squash into Parent…Ein Commit in den Commit darunter.
Fixup into Parent…Das Gleiche, wobei nur die Nachricht des übergeordneten Elements beibehalten wird (wie fixup in git rebase -i).
Squash Branch…Jeder Commit des Zweigs, seit er seine Basis verlassen hat, einschließlich Zusammenführungen, wird zu einem Commit auf dieser Basis zusammengefasst.
Alt-ziehenDas gezogene Commit und der Nachbar, auf dem Sie es ablegen. Der Hinweis Drop to squash … zeigt, wo Sie hingehen können; Esc bricht ab.

Commits, die Sie bereits gepusht haben

Wenn der Upstream des Zweigs über die Commits verfügt, wird dies im Dialogfeld angezeigt und Sie werden aufgefordert, I will force push … after squashing anzukreuzen, bevor es komprimiert wird. Anschließend bietet die Nachricht Force Push… an, das den Remote-Zweig nur dann ersetzt, wenn er sich immer noch dort befindet, wo Sie ihn zuletzt gesehen haben (force push).

Fixup-Commits für später

Um einen älteren Commit zu reparieren, ohne jetzt etwas neu zu schreiben, stellen Sie die Änderung bereit und wählen Sie Create Fixup Commit… für diesen Commit. Wählen Sie Fixup (behält seine Nachricht), Squash (fügt eine Notiz hinzu) oder Amend (ersetzt seine Nachricht durch New message). GitTree schreibt einen fixup!-, squash!- oder amend!-Commit fest; ein interactive rebase mit Arrange fixup!, squash! and amend! commits on klappt es ein.

Squash-Merges behalten ihre Autoren

Wenn Sie einen Zweig zusammenführen mit Squash into staged changes (no commit), erhält ein leeres Commit-Feld eine Meldung, in der die Commits aufgeführt sind, die es mit sich bringt, mit Co-authored-by Zeilen für ihre Autoren. Eine bereits geschriebene Nachricht bleibt erhalten.

Einstellungen

In den Einstellungen › General wählt Squash: starting message die Nachricht aus, mit der der Dialog beginnt, und Squash: credit co-authors legt fest, ob „Credit beginnt“ angekreuzt wird. Jeder Kürbis kann noch beides verändern.

Wenn etwas schief geht

„Die Commits liegen nicht nebeneinander. Wählen Sie einen ununterbrochenen Lauf.“

Wählen Sie Commits aus, die im ausgecheckten Zweig aufeinander folgen, oder verwenden Sie Squash Branch… für den gesamten Zweig.

„Ein Zusammenführungs-Commit würde klappen. Squash Branch … faltet Zusammenführungen; eine Auswahl kann nicht.“

Verwenden Sie Squash Branch… oder eine interaktive Rebase, um Commit für Commit auszuwählen.

„… enthält diese Commits: Sie sind gemeinsame Geschichte und können hier nicht unterdrückt werden.“

Eine andere entfernte Filiale hat sie. Lassen Sie sie unverändert oder stimmen Sie mit Ihrem Team überein, bevor Sie den gemeinsamen Verlauf über die Befehlszeile neu schreiben.

Der Squash stoppt mit einem Fehler und einer Review Again-Schaltfläche

Während der Dialog geöffnet war, wurde der Zweig geändert, sodass nichts gequetscht wurde. Drücken Sie Review Again, um den neuen Plan anzuzeigen, und drücken Sie dann erneut.

Fragen

Wie mache ich einen Kürbis rückgängig?

Drücken Sie in der Nachricht oder in der Symbolleiste auf Undo. GitTree behielt die alten Commits unter refs/ogt/trash, bevor der Zweig verschoben wurde, sodass sie genau so zurückkommen, wie sie waren.

Wessen Name steht auf dem gequetschten Commit?

Der Autor des ältesten Commits, der geklappt wird, mit seinem Datum; Du bist der Committer. Aktivieren Sie Credit the other authors (Co-authored-by), damit alle anderen gutgeschrieben bleiben.

Führt Squashing meine Commit-Hooks aus oder berührt es meine Arbeitsdateien?

Nein. GitTree schreibt die neuen Commits direkt, so wie es git rebase intern tut, und ändert niemals den Index oder die Dateien in Ihrem Arbeitsbaum. Es signiert sie, wenn Ihre Git-Konfiguration nach signierten Commits fragt.