web-dev-qa-db-fra.com

Comment effectuer un rebase (squash) en utilisant tortoisegit

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?

42
zerkms

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: Right click 2 commits

49
regisbsb

Cela fonctionne pour moi en utilisant TortoiseGit 1.7.12:

  1. Cliquez avec le bouton droit sur le répertoire de travail dans lequel vous souhaitez effectuer un rebase interactif et choisissez TortoiseGit -> Show log dans le menu contextuel.
  2. Dans la boîte de dialogue "Log Messages" qui apparaît, cliquez avec le bouton droit sur le commit le plus récent que vous ne souhaitez plus rebaser et choisissez Rebase master onto this... dans le menu contextuel.
  3. Dans la boîte de dialogue "Rebase" qui apparaît, cochez la case 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.
  4. Appuie sur le 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.

52
sschuberth

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".

3
BuvinJ
  • Aller à Show Log, puis créez une balise à votre validation actuelle (par exemple, "tmp").
  • Réinitialisez difficilement le premier commit de l'histoire que vous ne souhaitez pas modifier.
  • Basculer All Branches en bas du journal, si vous ne voyez pas tous les commits.
  • Sélectionnez ensuite tous les nouveaux commits et faites un clic droit dessus: Cherry Pick selected commits...
  • Vous êtes maintenant en mode interactif de rebase. Là, vous pouvez faire ce qui est commun pour le rebase interactif.
1
armin.miedl