153 votes

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

J'ai utilisé Extensions Git depuis un certain temps (c'est génial !) mais je n'ai pas trouvé de réponse simple à la question suivante :

Parfois, en tapant un message de livraison, on fait une faute de frappe. Mon ami m'a montré comment la corriger de la manière suivante (dans Git Extentions) :

Clic droit sur le commit > Avancé > Fixup commit

enter image description here

Ensuite, il me suffit de cocher la case "Modifier" et de réécrire mon message et voilà ! Mon message de validation est corrigé.

Cependant, cette autre option "Squash commit"... Je me suis toujours demandé ce qu'elle faisait !

Ma question est la suivante :

Quelqu'un pourrait-il simplement m'expliquer quelle est la différence exacte entre Engagement de la courge y Fixup commit sur Git/Git Extentions ? Ils ont l'air... "similaire" à moi : enter image description hereenter image description here

2voto

BraveNewMath Points 1306

J'ai bricolé des extensions git et je n'ai pas réussi à faire en sorte qu'il écrase plusieurs commits en un seul. Pour cela, j'ai dû recourir à la ligne de commande et j'ai trouvé ce poste utile

git rebase -i Head~2

Il s'agit d'un rebasement interactif, et notez ce qui suit :

  • ~2 se réfère ici au nombre de commits que vous voulez impliquer dans cette opération, y compris la tête actuelle
  • Vous devez modifier la fenêtre d'édition interactive subséquente, laisser le premier élément comme "pick" et remplacer les lignes suivantes par "squash". Les instructions dans le lien ci-dessus sont beaucoup plus claires si cela est opaque.

0voto

WesternGun Points 1621

Pourquoi ne pas demander à git lui-même ? Lorsque vous rebasez avec git-bash il est dit :

pick 512b1d7 (some comment)
# Rebase 621b2e4..512b1d7 onto 621b2e4 (1 command)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
D:/code/fenixito-legacy-api/.git/rebase-merge/git-rebase-todo [unix] (11:57 23/10/2019)                                         1,1 start
"D:/code/xxx/.git/rebase-merge/git-rebase-todo" [UNIX] 27L, 1170C

Donc vous voyez :

s, squash = utiliser le commit, mais le fusionner avec le commit précédent

f, fixup = comme "squash", mais sans le message du journal de ce commit

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X