Impossible de savoir comment effectuer un rebasage de squash pour la branche actuelle. La commande console serait
git rebase -i HEAD~2
puis écraser comme d'habitude. Mais comment faire de même dans TGit?
Script pour initialiser le cas
git init .
touch 1
git add 1
git commit -m "1"
touch 2
git add 2
git commit -m "2"
touch 3
git add 3
git commit -m "3"
Par conséquent, après l'écrasement, nous aurions 1 commit avec 3 fichiers.
Des propositions?
Ne faites aucune des précédentes! Combinez simplement 2 commits en utilisant l'interface. N'oubliez pas de ne pas combiner les commits déjà sur le repo partagé. Voir:
Cela fonctionne pour moi en utilisant TortoiseGit 1.7.12:
TortoiseGit
-> Show log
dans le menu contextuel.Rebase master onto this...
dans le menu contextuel.Force Rebase
case à cocher puis faites un clic droit sur le commit pour choisir entre Pick
, Squash
, etc., ou cochez la case Squash ALL
case à cocher dans votre cas.Start Rebase
, qui en cas de succès se transforme en bouton Commit
, puis en bouton Done
. Appuyez sur chacun d'eux.Notez que dans votre exemple de script, vous écraserez/corrigerez la validation racine, ce qui est un cas spécial et ne fonctionne pas comme décrit ci-dessus car la validation racine n'a pas de parent que vous pouvez sélectionner à l'étape 2.
Voici ce que j'ai fait en utilisant Tortoise Git et en stockant le dépôt sur Assembla (qui est apparemment via similaire à GitHub).
J'ai décidé que je voulais supprimer efficacement l'intégralité de mon historique de commit et recommencer le dépôt à partir de zéro. J'aurais pu supprimer le dossier git local et le référentiel correspondant dans Assembla, puis le recréer, mais j'ai pensé qu'il valait mieux comprendre comment le faire de la "bonne manière".
Voici comment je l'ai réalisé:
1) À l'aide de Tortoise Git, affichez le journal du dépôt. Mettez en surbrillance toutes les validations, faites un clic droit dessus et sélectionnez "combiner en une seule validation".
2) Dans la boîte de dialogue qui apparaît, supprimez le commentaire de validation (qui devient une combinaison de tous les commentaires précédents) et remplacez-le par un seul commentaire, par exemple REBASE. Ensuite, lancez le commit. Le dépôt local sera alors effectivement démarré à partir de zéro (avec tous les fichiers qui y sont ajoutés bien sûr) sans avoir à le supprimer et à le recréer.
3) Malheureusement, vous ne pouvez pas simplement le pousser vers Assembla. Il rejettera cela, insistant sur le fait que votre "tête" est derrière la branche distante. Donc, pour résoudre ce problème, allez d'abord sur la page "Paramètres" du dépôt dans Assembla. Activez "Autoriser –pousser".
4) Effectuez maintenant un "Push forcé". Je ne sais pas si Tortoise Git a une option gui pour cela, mais c'est facile à faire via l'invite de commande:
cd [your repo folder]
git Push -f Origin
Terminé!
MISE À JOUR:
Pour "forcer Push" avec TortoiseGit, dans la boîte de dialogue Push, il y a des cases à cocher pour forcer les "changements connus" et "changements inconnus". Je ne sais pas quelle est la différence, mais ils entraînent tous deux l'utilisation du commutateur git --force. Essayez d'abord les "changements connus".
Show Log
, puis créez une balise à votre validation actuelle (par exemple, "tmp").All Branches
en bas du journal, si vous ne voyez pas tous les commits.Cherry Pick selected commits...