Passer au contenu
GitTree
Histoire et récupération

Squash s’engage

Le Squashing combine plusieurs commits en un seul, comme un fixup ou un squash dans git rebase -i. Dans GitTree, chaque squash ouvre d'abord la boîte de dialogue Squash : elle affiche les commits qui se terminent, le résultat, le message et qui obtient le crédit, et rien ne change jusqu'à ce que vous confirmiez. Votre travail non validé n'est jamais touché et Undo remet les validations.

GratuitMis à jour

Fonctionne dans GitTree Gratuit : toutes les fonctionnalités Git locales, une fois connecté.

Sur cette page
  1. Avant de commencer
  2. Où le trouver
  3. Mesures
  4. Résultat attendu
  5. Façons d'écraser
  6. Les commits que vous avez déjà poussés
  7. La correction s'engage pour plus tard
  8. Les fusions Squash gardent leurs auteurs
  9. Paramètres
  10. Si quelque chose ne va pas
  11. Questions
  12. En rapport

Avant de commencer

  • Les commits se trouvent sur la branche que vous avez extraite, sur une seule ligne ininterrompue. Une sélection ne peut pas contenir de validation de fusion ; Squash Branch… le peut.
  • Les commits écrasés et chaque commit au-dessus d'eux obtiennent de nouveaux identifiants. Si vous les avez déjà poussés, vous aurez besoin d'une poussée forcée par la suite ; l'historique que contient une autre branche distante ne peut pas être écrasé ici.

Où le trouver

  • Sélectionnez deux commits ou plus dans le graphique (Maj-clic pour une plage), cliquez avec le bouton droit : Squash Commits….
  • Cliquez avec le bouton droit sur un commit : Edit History > Squash into Parent… ou Fixup into Parent….
  • Cliquez avec le bouton droit sur la branche extraite dans le graphique ou dans le panneau de gauche : Squash Branch….
  • Maintenez Alt (⌥ sur un Mac) et faites glisser un commit sur le commit juste au-dessus ou en dessous.
  • Cliquez avec le bouton droit sur une validation : Edit History > Create Fixup Commit… pour valider ce qui est préparé en tant que correctif.
  • Chacun d'entre eux se trouve également dans la palette de commandes et sur la carte Squash du Guide des fonctionnalités.
ActionmacOSWindows et Linux
Squash Commits… sur la sélection⌥SAlt+S
Squash into Parent… pour le commit sélectionné⌥QAlt+Q
Squash Branch… pour la branche extraite⌥⇧BAlt+Shift+B
Undo la courge⌘ZCtrl+Z

Mesures

  1. Ouvrir la boîte de dialogue Squash

    Utilisez n’importe quelle entrée ci-dessus. La boîte de dialogue porte le nom de ce que vous écrasez, par exemple Squash 3 Commits, Squash a1b2c3d into Its Parent ou Squash Branch feature/login. Sa ligne récapitulative se lit comme suit : « 3 commits deviennent 1 · 12 fichiers · +240 −31 · conserve la paternité d'Ada ».

  2. Vérifiez les commits qui se plient

    Commits that fold les répertorie en premier sous le Result : un commit écrit par l'auteur du plus ancien. Pour Squash Branch…, Base: montre où la branche a quitté sa base ; Change… vous permet de taper une autre branche, une autre balise ou un commit, et le plan est refait.

  3. Choisissez le message

    Sous Start the message from, sélectionnez Combine Messages, Oldest Message, Newest Message, List of Commits ou Write My Own, puis modifiez le texte à votre guise. Une ligne récapitulative est requise.

  4. Gardez les autres auteurs crédités

    Lorsque d'autres personnes ont écrit certains des commits, Credit the other authors (Co-authored-by) ajoute une ligne Co-authored-by pour chacun d'eux. Les lignes qu'il ajoute sont répertoriées en dessous ; décochez-la pour les laisser de côté.

  5. Lisez ce qui change d'autre, puis écrasez

    What else changes indique combien de commits ci-dessus obtiennent de nouveaux identifiants (leurs modifications restent les mêmes) et quelles autres branches ou balises conservent les anciens commits. Appuyez sur le bouton de confirmation, tel que Squash 3 Commits ou Squash into Parent.

Résultat attendu

GitTree dit, par exemple, 3 commits squashed into a1b2c3d. avec un bouton Undo, et le graphique montre un commit là où il y en avait plusieurs.

Vos modifications préparées et non préparées et vos fichiers non suivis sont exactement tels qu'ils étaient : la courge ne touche jamais l'arborescence de travail.

Façons d'écraser

Ce que chaque courge plie
CommandeQuels plis
Squash Commits…Les commits que vous avez sélectionnés, au moins deux côte à côte sur la branche extraite.
Squash into Parent…Un commit dans le commit en dessous.
Fixup into Parent…Idem, en ne gardant que le message du parent (comme fixup dans git rebase -i).
Squash Branch…Chaque commit de la branche depuis qu'elle a quitté sa base, fusionne inclus, en un seul commit sur cette base.
Alt-glissezLe commit glissé et le voisin sur lequel vous le déposez. Le repère Drop to squash … montre où vous pouvez vous déposer ; Esc annule.

Les commits que vous avez déjà poussés

Si la branche en amont de la branche a les commits, la boîte de dialogue le dit et vous demande de cocher I will force push … after squashing avant de l'écraser. Ensuite, le message propose Force Push…, qui remplace la branche distante uniquement si elle se trouve toujours là où vous l'avez vue pour la dernière fois (force push).

La correction s'engage pour plus tard

Pour corriger un ancien commit sans rien réécrire maintenant, effectuez la modification et choisissez Create Fixup Commit… sur ce commit. Choisissez Fixup (conserve son message), Squash (ajoute une note) ou Amend (remplace son message par le New message). GitTree valide un commit fixup!, squash! ou amend! ; un rebase interactif avec Arrange fixup!, squash! and amend! commits dessus le plie.

Les fusions Squash gardent leurs auteurs

Lorsque vous fusionnez une branche avec Squash into staged changes (no commit), une boîte de validation vide reçoit un message répertoriant les validations qu'elle apporte, avec Co-authored-by lignes pour leurs auteurs. Un message que vous avez déjà rédigé est conservé.

Paramètres

Dans Préférences › General, Squash: starting message sélectionne le message par lequel commence la boîte de dialogue et Squash: credit co-authors définit si le crédit commence. Chaque courge peut encore changer les deux.

Si quelque chose ne va pas

"Les commits ne sont pas côte à côte. Sélectionnez une exécution ininterrompue."

Sélectionnez les commits qui se succèdent sur la branche extraite, ou utilisez Squash Branch… pour la branche entière.

"Une validation de fusion se plierait. Squash Branch… plie les fusions ; une sélection ne le peut pas."

Utilisez Squash Branch… ou un rebase interactif pour choisir validation par validation.

"... contient ces commits : ils constituent un historique partagé et ne peuvent pas être écrasés ici."

Une autre succursale distante en possède. Laissez-les tels quels ou mettez-vous d'accord avec votre équipe avant de réécrire l'historique partagé à partir de la ligne de commande.

Le squash s'arrête avec une erreur et un bouton Review Again

Quelque chose a modifié la branche alors que la boîte de dialogue était ouverte, donc rien n'a été écrasé. Appuyez sur Review Again pour voir le nouveau plan, puis écrasez à nouveau.

Questions

Comment annuler une courge ?

Appuyez sur Undo dans le message ou dans la barre d'outils. GitTree a conservé les anciens commits sous refs/ogt/trash avant de déplacer la branche, afin qu'ils reviennent exactement tels qu'ils étaient.

Quel nom figure sur le commit écrasé ?

L'auteur du commit le plus ancien qui se plie, avec sa date ; c'est vous qui commettez. Activez Credit the other authors (Co-authored-by) pour que tous les autres soient crédités.

L'écrasement exécute-t-il mes hooks de validation ou touche-t-il mes fichiers de travail ?

Non. GitTree écrit les nouveaux commits directement, comme le fait git rebase en interne, et ne modifie jamais l'index ou les fichiers de votre arborescence de travail. Il les signe lorsque votre configuration Git demande des commits signés.