web-dev-qa-db-fra.com

Quelle est la différence entre "squash" et "fixup" dans Git / Git Extension?

J'utilise Git Extensions depuis un moment (c'est génial!) Mais je n'ai pas trouvé de réponse simple à ce qui suit:

Parfois, lorsque vous tapez un message de validation, vous pouvez créer une faute de frappe. Mon ami m'a montré comment résoudre le problème de la manière suivante (dans Git Extentions):

Clic droit sur le commit> Avancé> commit de fixup

enter image description here

Ensuite, je coche simplement la case "Modifier" et réécris mon message et le tour est joué! Mon message de commit est corrigé.

Cependant cette autre option "Squash commit" ... Je me suis toujours demandé ce que ça faisait?!

Ma question est:

Quelqu'un pourrait-il simplement m'expliquer quelle est la différence exacte entre commit Squash et commitup fix dans Extensions Git/Git? Ils ont l'air un peu ... "similaires" pour moi: enter image description hereenter image description here

92
Placeholder

Je ne sais pas ce que Git Extensions en fait, mais git rebase a une option pour écraser ou corriger automatiquement les commits avec squash! ou réparer! préfixes, respectivement:

   --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 différence entre squash et fixup réside dans le fait que lors de la modification de la base, l'opération squash vous invitera à combiner les messages de la validation d'origine et de la validation squash, alors que l'opération fixup conservera le message d'origine et ignorer le message de la validation de correction.

128
drizzd

En termes simples, lors du changement de base d'une série de commits, chaque commit marqué comme un squash vous donne la possibilité d'utiliser son message dans le cadre d'un message pick ou reword commit.

Lorsque vous utilisez fixup, le message de cette validation est supprimé.

58
ocodo

De doc de git-rebase :

Si vous souhaitez plier deux commits ou plus en un, remplacez la commande "pick" pour le deuxième et les prochains commits par "squash" ou "fixup". Si les commit ont des auteurs différents, le commit plié sera attribué à l'auteur du premier commit. Le message de validation suggéré pour la validation pliée est la concaténation des messages de validation de la première validation et de ceux avec la commande "squash", mais les messages de validation des validations avec la commande "fixup" sont omis.

14
Paulo Lieuthier

J'ai bricolé avec des extensions git et je ne pouvais pas l'obtenir pour écraser plusieurs commits en un. Pour ce faire, j'ai dû recourir à la ligne de commande et trouvé this post utile

git rebase -i Head~2

C'est une base interactive, et notez ce qui suit:

  • ~ 2 indique le nombre de commits que vous souhaitez impliquer dans cette opération, y compris la tête actuelle.
  • Vous devez éditer la fenêtre d'édition interactive suivante, laisser le premier élément "pick" et remplacer les lignes suivantes par "squash". Les instructions dans le lien ci-dessus sont beaucoup plus claires si cela est opaque.
1
BraveNewMath