162 votes

Comment puis-je combiner deux commits en un seul ?

J'ai une branche 'firstproject' avec 2 commits. Je veux me débarrasser de ces commits et les faire apparaître comme un seul commit.

La commande git merge --squash semble prometteur, mais lorsque je lance git merge --squash mon terminal n'affiche que les options de la commande. Quelle est la commande correcte ?

Commit 1:
Added 'homepage.html'
Added 'contacts.html'

Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'

231voto

meagar Points 85475

Vous voulez git rebase -i pour effectuer un rebasement interactif .

Si vous êtes actuellement sur votre "commit 1", et le commit que vous voulez fusionner, "commit 2", est le commit précédent, vous pouvez exécuter git rebase -i HEAD~2 qui va générer un éditeur listant tous les commits que le rebasement va traverser. Vous devriez voir deux lignes commençant par "pick". Pour procéder à l'écrasement, changez le premier mot de la deuxième ligne de "pick" en "squash". Puis enregistrez votre fichier et quittez. Git va écraser votre premier commit dans votre avant-dernier commit.

Notez que ce processus réécrit l'historique de votre branche. Si vous poussez votre code quelque part, vous devrez git push -f et toute personne partageant votre code devra franchir des obstacles pour reprendre vos modifications.

Notez que si les deux commits en question ne sont pas les deux derniers commits de la branche, le processus sera légèrement différent.

33voto

user5820972 Points 371
  1. Vérifiez votre branche et comptez la quantité de tous vos commits.
  2. Ouvrez git bash et écrivez : git rebase -i HEAD~<quantity of your commits> (c'est-à-dire git rebase -i HEAD~5 )
  3. En ouvert txt changement de fichier pick mot-clé pour squash pour tous les commits, sauf le premier commit (qui est en haut). Pour le premier commit, changez-le en reword (ce qui signifie que vous fournirez un nouveau commentaire pour cette livraison à l'étape suivante) et cliquez sur SAVE ! Si vous êtes dans vim, appuyez sur esc puis sauvegarder en entrant wq! et appuyez sur la touche Entrée.
  4. Fournir des commentaires.
  5. Ouvrez Git et faites "Fetch all" pour voir les nouveaux changements.

Terminé

21voto

Ray L Points 2168

Voici ce que je fais. C'est plus facile (pour moi) que de faire un rebasement interactif :

git reset HEAD~2.  // go back 2 commits.
git commit -am “My squashed single commit”
git push --force

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