web-dev-qa-db-fra.com

Squash dans SourceTree

Est-il possible de squasher dans SourceTree? J'ai vu que, apparemment, vous pouvez "glisser-déposer" les commits afin de les écraser. Cependant, lorsque je fais cela, cela ne fait que souligner plusieurs commits.

26
Miles

Réponse mise à jour

SourceTree pour Windows

À partir de la version 1.5 , vous pouvez maintenant faire des rebases interactifs, ce qui vous permettra de vous écraser.

SourceTree pour Mac

Le rebase interactif est disponible dans SourceTree pour Mac depuis la version 1.6 (accent sur le mien):

La commande git rebase –interactive Vous permet de réorganiser vos validations après les avoir créées (mais avant de les avoir rendues publiques), et maintenant vous pouvez le faire dans SourceTree. Combinez (squash) plusieurs commits ensemble, ou réorganisez-les, simplement par glisser-déposer. Vous pouvez également modifier le message de validation ou modifier le contenu des validations. Faites simplement un clic droit sur un commit dans le journal et choisissez ‘Rebase children of <sha> Interactively’ pour lancer le processus.

Ancienne réponse

Apparemment, écraser les commits est une fonctionnalité de SourceTree version 1.6 pour Mac .

Cependant, la fonctionnalité ne semble pas être disponible dans la version Windows de SourceTree, qui est actuellement encore à la version 1.0.8.

Utilisation de la ligne de commande

Vous avez toujours la possibilité d'utiliser la ligne de commande pour écraser les commits:

git rebase -i <sha-of-base-commit>

Dans la liste TODO, placez un s (pour squash) à côté de commits pour squash dans le commit précédent:

pick e953225 Add meow meow meow
s def892d Add master

Pour en savoir plus sur la façon d'écraser les validations à l'aide de la ligne de commande, voir Squashing Commits , dans le [~ # ~] free [~ # ~] livre Pro Git en ligne .

25
user456814

Depuis 1.4.1.0, les utilisateurs de Windows n'ont toujours pas de squash. Cependant, vous pouvez obtenir le même résultat à la main.

Pour écraser la branche A en branche B:

  1. Créez une branche à partir de A et appelez-la C.
  2. Remettez C à B en mode soft.
  3. Découvrez B.
  4. Commettre.

    1.              2.                          3.                             4.
        * <- [A][C]    * <- [A]                    * <- [A]                       * <- [A]
        |              |                           |                              |
        *              * o <- [C] with changes     * o <- [C][B] with changes     * * <- [C][B] committed
        |              |/                          |/                             |/
        * <- [B]       * <- [B]                    *                              *
        |              |                           |                              |
        :              :                           :                              :
    

Vous n'avez pas besoin de créer C si vous n'avez pas besoin de conserver la position de A.

Je recommande d'ouvrir gitk de côté tout en faisant cela car vous pouvez voir toutes les validations détachées jusqu'à ce que vous fermiez. (J'aimerais voir cette générosité dans SourceTree)

Au moins, reflog est votre ami.

6
snipsnipsnip

Cliquez avec le bouton droit sur le commit parent et sélectionnez "Rebase des enfants de manière interactive". Après cela, vous pourrez glisser-déposer pour valider les commits.

5
alvarodoune

Squashing à l'ancienne au sein de votre propre branche locale

Cette réponse fonctionne avec la plupart des versions de Sourcetree sur n'importe quelle plate-forme, car j'utilise uniquement les anciennes fonctionnalités. C'est assez simple, après y avoir pensé. Comme d'habitude, cela ne fonctionne qu'avant de rendre votre travail public. Je l'utilise pour créer des commits "bien rangés" dans le référentiel partagé, tout en effectuant fréquemment des validations dans mon propre référentiel local. Supposons que vous soyez dans la branche locale myfeature. Supposons que vous ayez plusieurs commits avant la branche Origin/myfeature. Vous pouvez rester dans la branche myfeature tout au long de la procédure, donc vous n'influencerez le travail de personne d'autre.

Étape 1

Effectuez une "réinitialisation de la branche actuelle sur ce commit" sur le dernier commit publié. C'est le commit intitulé Origin/myfeature. Une réinitialisation mixte conservera toutes vos modifications. Assurez-vous de vérifier que votre réinitialisation est mitigée. (Si vous effectuez par inadvertance une réinitialisation matérielle, vous perdrez votre travail ...)

Étape 2

Organisez vos changements (comme d'habitude). N'oubliez pas les fichiers que vous avez ajoutés ou supprimés en chemin!

Étape 3

Commettre. Écrivez un bon message de validation qui résume tous vos propres messages de validation (locaux), car ils sont perdus.

Terminé!

Vous avez tout écrasé et nettoyé vos validations locales à l'étape 1. Vous êtes toujours sur votre propre branche de fonctionnalités, vous n'avez donc rien influencé d'autre. Si vous ne vous sentez pas en sécurité, étiquetez votre dernier commit avant de faire quoi que ce soit d'autre. Juste pour garder en sécurité. De cette façon, vous pouvez toujours réinitialiser matériellement cette étiquette en cas de problème. Si tout fonctionne, supprimez simplement cette étiquette pour nettoyer votre historique de validation.

1
Stef Joosten