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

192voto

drizzd Points 520

Je ne sais pas ce que Git Extensions en fait spécifiquement, mais git rebase a une option pour automatiquement écraser ou réparer les commits avec les préfixes squash ! ou fixup ! 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 le squash et le fixup est que pendant le rebase, le squash vous invitera à combiner les messages du commit original et du squash, alors que l'opération fixup conservera le message original et rejettera le message du commit de correction.

88voto

EmacsFodder Points 12284

En termes simples, lors du rebasage 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 projet de pick o reword message d'engagement.

Lorsque vous utilisez fixup le message de ce commit est écarté.

41voto

Loi Nguyen Huynh Points 2147

Si la question est de savoir quelle est la différence entre squash y fixup dans git en faisant git rebase --interactive alors la réponse est la suivante message de validation .

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

f, fixup <commit> = comme "squash", mais ne tenez pas compte du message d'enregistrement de ce commit


Par exemple :

pick 22a4667 father commit message
squash 46d7c0d child commit message # case 1
# fixup 46d7c0d child commit message # case 2

El message de validation après un rebasage en cas 1 serait :

father commit message

child commit message

alors que le message de validation dans le cas 2 est :

father commit message
# no sub messages

16voto

Paulo Lieuthier Points 376

Desde doc git-rebase, section "mode interactif". :

Si vous voulez regrouper deux ou plusieurs commits en un seul, remplacez la commande "pick" pour le deuxième commit et les suivants par "squash" ou "fixup". Si les commits ont des auteurs différents, le commit replié sera attribué à l'auteur du premier commit. Le message de commit suggéré pour le commit replié est la concaténation des messages de commit du premier commit et de ceux avec la commande "squash", mais omet les messages de commit des commits avec la commande "fixup".

5voto

Philip Oakley Points 3825

Les deux sites squash y fixup permettront d'introduire des changements de code par leurs diff's respectifs. (non mentionné normalement)

La distinction entre squash y fixup est dans la façon dont l'engagement messages sont traitées.

Dans le fixup Dans ce cas, le message de validation original est conservé, sans modification, et tout texte contenu dans le message de validation est conservé. fixup commettre message est ignorée (rejetée sans ménagement).

Dans le squash dans ce cas, les deux messages de commit sont combinés ("melded"), l'un après l'autre, et proposés à l'éditeur de l'utilisateur, afin qu'ils puissent être amalgamés/fondus ensemble comme le souhaite l'utilisateur.

Le message combiné initial (squash) contiendra des marques de commentaires indiquant où les messages commencent et se terminent. Multiple squash y fixup peuvent être appliquées.

La terminologie peut prêter à confusion lorsqu'il est question de petites corrections de code (sans qu'il soit nécessaire de modifier le message), car on peut souvent suggérer que le code est "comprimé", alors qu'une squash n'est pas vraiment nécessaire.

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