2013-05-26 17 views
66

Sto usando Git Extensions per un po 'di tempo (è impressionante!), Ma non ho trovato una risposta semplice al seguente:Qual è la differenza tra "squash" e "fixup" in Git/Git Extension?

A volte, quando si digita un messaggio di commit, un make un errore di battitura. Il mio amico mi ha fatto vedere come risolvere il problema nel modo seguente (in Git Extentions):

Right-Click sul commettere> Avanzate> Correzione commettere

enter image description here

Poi ho semplicemente controllare la box "Modifica" e riscrivi il mio messaggio e voilà! Il mio messaggio di commit è stato risolto.

Tuttavia questa altra opzione "Squash commit" ... Mi sono sempre chiesto cosa faccia ?!

La mia domanda è:

Qualcuno semplicemente spiegare che cosa è la differenza esatta tra Squash commit e Fixup commettere in Git/Git Extentions? Sembrano un po '... "simile" a me: enter image description here enter image description here

risposta

85

non so cosa Git Extensions fa con esso specificamente, ma git rebase ha un'opzione per squash o correzione automaticamente impegna con zucca! o correzione! prefissi, rispettivamente:

--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). 

La differenza tra squash e correzione è che durante il rebase, l'operazione di zucca vi verrà chiesto di combinare i messaggi dell'originale e la zucca commit, mentre l'operazione di correzione manterrà il messaggio originale e scartare il messaggio dal commit fixup.

+4

È possibile leggere ulteriori informazioni su 'rebase' e ​​squash/fixup su [the Git docs] (http://git-scm.com/docs/git-rebase). –

+0

Questa è un'ottima risposta. Mi sono sempre chiesto perché ho ricevuto messaggi di commit combinati. –

39

poche parole, quando rebasing una serie di commit, ogni commit contrassegnato come squash, ti dà la possibilità di utilizzare il suo messaggio come parte di un messaggio di commit pick o reword.

Quando si utilizza fixup il messaggio da tale commit viene eliminato.

9

Da git-rebase doc:

Se si vuole piegare due o più commit in una sola, sostituire il comando "scegliere" per la seconda e le successive commit con "zucca" o "fixup". Se i commit avevano autori diversi, il commit ripiegato sarà attribuito all'autore del primo commit. Il messaggio di commit suggerito per il commit ripiegato è la concatenazione dei messaggi di commit del primo commit e di quelli con il comando "squash", ma omette i messaggi di commit di commit con il comando "fixup".

0

Ho armeggiato con estensioni git e non sono riuscito a ottenere molti conflitti in uno.Per fare questo, ho dovuto ricorrere alla riga di comando e ho trovato this post utile

git rebase -i Head~2 

Questo è rebase interattivo, e notare quanto segue:

  • ~ 2 qui si riferisce a quanti si impegna si desidera coinvolgere in questa operazione, incluso l'attuale capo
  • È necessario modificare la finestra di modifica interattiva secondaria, lasciare il primo elemento come "selezionare" e sostituire le righe successive con "squash". Le istruzioni nel link sopra sono molto più chiare se questo è opaco.