2013-05-26 12 views
66

Ich habe mit Git Extensions für eine Weile jetzt (es ist genial!), Aber ich habe nicht eine einfache Antwort auf die folgende gefunden:Was ist der Unterschied zwischen "Squash" und "Fixup" in der Git/Git-Erweiterung?

Manchmal, wenn die Eingabe eine Commit-Nachricht, ein Tippfehler machen. Mein Freund hat mir gezeigt, wie es die folgende Art und Weise zu beheben (in Git Extentions):

Rechtsklick auf die commit> Erweitert> Fixup begehen

enter image description here

Dann einfach prüfe ich die Box "Amend" und schreibe meine Nachricht um und voila! Meine Commit-Nachricht ist behoben.

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

Meine Frage ist:

Würde jemand mir einfach erklären, was ist der genaue Unterschied zwischen Squash commit und Fixup in Git/Git Extentions begehen? Sie sehen irgendwie ... „ähnlich“ mir: enter image description here enter image description here

Antwort

85

Ich weiß nicht, was Git Extensions tut damit speziell, aber git rebase hat eine Option, um automatisch Squash oder fixup begeht mit Squash! oder reparieren! Präfixe jeweils:

--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 ist, dass Sie während der Fütterungsmaterial, wird der Squash Betrieb aufgefordert, die Nachrichten des Originals und der Squash zu kombinieren commit, während die Fixup Betrieb die ursprüngliche Nachricht halten und verwerfen Sie die Nachricht aus dem Fixup-Commit.

+4

Sie können mehr über 'rebase' und squash/fixup unter [the Git docs] (http://git-scm.com/docs/git-rebase) lesen. –

+0

Dies ist eine großartige Antwort. Ich habe mich immer gewundert, warum ich Combi-Nachrichten erhalten habe. –

39

Einfach ausgedrückt, wenn eine Reihe von Commits Rebasing, die jeweils als squash markiert commit, gibt Ihnen die Möglichkeit, seine Nachricht als Teil einer Nachricht verpflichten pick oder reword zu verwenden.

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

9

Von git-rebase doc:

Wenn Sie zwei falten wollen oder mehr Commits in ein, ersetzen Sie den Befehl für die zweite und die folgenden Commits mit „Squash“ „Pick“ oder „fixup“. Wenn die Commits unterschiedliche Autoren hatten, wird der gefaltete Commit dem Autor des ersten Commits zugeordnet. Die vorgeschlagene Commit-Nachricht für das gefaltete Commit ist die Verkettung der Commit-Nachrichten des ersten Commits und derjenigen mit dem "Squash" -Befehl, unterlässt jedoch die Commit-Nachrichten von Commits mit dem "Fixup" -Befehl.

0

Ich bastelte mit Git-Erweiterungen und konnte nicht viele Commits in eins zerquetschen.Um das zu tun, musste ich auf die Kommandozeile zurückgreifen und fand this post hilfreich

git rebase -i Head~2 

Dies ist interaktives Fütterungsmaterial und beachten Sie Folgendes:

  • ~ 2 bezieht sich hier auf wie viele verpflichten Sie wollen involvieren Sie in diesem Vorgang, einschließlich der aktuellen Kopf
  • Sie müssen das interaktive Bearbeitungsfenster bearbeiten, verlassen Sie das erste Element als "Pick" und ersetzen die folgenden Zeilen mit "Squash". Die Anweisungen im obigen Link sind viel klarer, wenn dies undurchsichtig ist.
Verwandte Themen