it-swarm.com.de

Was ist der Unterschied zwischen "Squash" und "Fixup" in Git / Git Extension?

Ich benutze Git Extensions schon eine Weile (es ist großartig!), Aber ich habe keine einfache Antwort auf die folgenden Fragen gefunden:

Wenn Sie eine Commit-Nachricht eingeben, kann es vorkommen, dass Sie einen Tippfehler machen. Mein Freund hat mir gezeigt, wie ich das Problem folgendermaßen beheben kann (in Git Extentions):

Klicken Sie mit der rechten Maustaste auf das Commit> Erweitert> Fixup-Commit

enter image description here

Dann aktiviere ich einfach das Kontrollkästchen "Amend" und schreibe meine Nachricht und voila! Meine Festschreibungsnachricht ist behoben.

Allerdings diese andere Option "Squash Commit" ... Ich habe mich immer gefragt, was es macht ?!

Meine Frage ist:

Würde mir einfach jemand erklären, was genau der Unterschied zwischen Squash-Commit und Fixup-Commit in Git/Git-Extentions ist? Sie sehen irgendwie ... "ähnlich" für mich aus: enter image description hereenter image description here

92
Placeholder

Ich weiß nicht, was Git Extensions speziell damit macht, aber git rebase hat die Option, automatisch Squash zu machen oder Commits mit Squash zu reparieren! oder reparieren! Präfixe:

   --autosquash, --no-autosquash
       When the commit log message begins with "squash! ..." (or "fixup!
       ..."), and there is a commit whose title begins with the same ...,
       automatically modify the todo list of rebase -i so that the commit
       marked for squashing comes right after the commit to be modified,
       and change the action of the moved commit from pick to squash (or
       fixup).

Der Unterschied zwischen "Squash" und "Fixup" besteht darin, dass Sie während des Zurücksetzens bei der Operation squash aufgefordert werden, die Nachrichten des Originals und des Squash-Commits zu kombinieren, während bei der Operation fixup die ursprüngliche Nachricht und beibehalten werden Verwerfen Sie die Nachricht aus dem Fixup-Commit.

128
drizzd

Einfach ausgedrückt, wenn Sie eine Reihe von Festschreibungen umbasieren, gibt Ihnen jedes als squash markierte Festschreiben die Möglichkeit, seine Nachricht als Teil einer pick- oder reword-Festschreibungsnachricht zu verwenden.

Wenn Sie fixup verwenden, wird die Nachricht von diesem Commit verworfen.

58
ocodo

From git-rebase doc :

Wenn Sie zwei oder mehr Commits zu einem zusammenfassen möchten, ersetzen Sie den Befehl "pick" für den zweiten und die folgenden Commits durch "squash" oder "fixup". Wenn die Commits unterschiedliche Autoren hatten, wird das gefaltete Commit dem Autor des ersten Commits zugeordnet. Die vorgeschlagene Festschreibungsnachricht für die gefaltete Festschreibung ist die Verkettung der Festschreibungsnachrichten der ersten Festschreibung und derjenigen mit dem Befehl "squash", lässt jedoch die Festschreibungsnachrichten der Festschreibungen mit dem Befehl "fixup" aus.

14
Paulo Lieuthier

Ich habe an Git-Erweiterungen herumgebastelt und konnte nicht erreichen, dass viele Commits in einem zusammengefasst wurden. Dazu musste ich auf die Kommandozeile zurückgreifen und fand diesen Beitrag hilfreich

git rebase -i Head~2

Dies ist eine interaktive Basis, und beachten Sie Folgendes:

  • ~ 2 bezieht sich hier auf die Anzahl der Commits, die Sie in diese Operation einbeziehen möchten, einschließlich des aktuellen Heads
  • Sie müssen das nachfolgende interaktive Bearbeitungsfenster bearbeiten, das erste Element als "Auswählen" belassen und nachfolgende Zeilen durch "Kürbis" ersetzen. Die Anweisungen im obigen Link sind viel klarer, wenn dies undurchsichtig ist.
1
BraveNewMath