Je veux combiner mes deux derniers commits. Voici le résultat de git log
:
Maintenant, je veux fusionner ces deux derniers commits (qui sont dans la zone de lecture) en un seul commit. Comment puis je faire ça?
Il existe plusieurs façons de le faire (en utilisant rebase
ou reset
).
L'approche utilisant git reset
:
git status
pour le savoir. S'il y a des modifications non validées, enregistrez-les dans une cachette ( git stash
ou les valider sur une branche temporaire.git branch backup
pour créer une branche de sauvegarde sur le commit actuel.reflog
ou en écrivant le hachage du commit actuel) mais c'est le moyen le plus simple de restaurer l'état actuel en cas de problème.git reset --soft HEAD~2
.HEAD
deux validations dans le passé (lors de la validation e8de117
) sans modifier l'arborescence de travail ou l'index. L'index et l'arborescence de travail ressemblent maintenant à ce qu'ils étaient juste avant de créer le commit 6aa74e4
. Tous les fichiers modifiés au cours des deux dernières validations seront déjà ajoutés à l'index. Parce que HEAD
est sur e8de117
, le prochain commit sera créé au-dessus de e8de117
(il "remplacera" les commits 6aa74e4
et 77c15d6
).git commit
. Vous devrez saisir un nouveau message de validation.git diff backup
ne devrait signaler aucune différence) ou si vous avez changé d'avis, exécutez git reset --hard backup
pour revenir d'où vous êtes parti (en fait, juste après l'étape 2).backup
créée à l'étape 2 ( git branch -D backup
).Vous recherchez la fonction squash
d'un rebase
interactif:
Utilisation git rebase -i HEAD~2
pour démarrer un rebase interactif. Dans l'éditeur d'ouverture, toutes les validations faisant partie du rebase sont répertoriées. Dans ce cas, puisque nous avons fourni le HEAD~2
argument à l'appel rebase
, nous voyons deux commits, chacun préfixé par pick
. Ne rien changer conduirait rebase à pick
, c'est-à-dire appliquer les deux validations, et rien ne serait différent. Au lieu de cela, ce que vous voulez faire est de pick
un seul commit, tandis que squash
ing l'autre. De cette façon, vous écrasez le deuxième commit dans le premier, résultant en un seul commit. Lorsque vous êtes sûr et que vous quittez maintenant, git vous proposera un nouveau message de validation, et voilà: une nouvelle validation contenant les modifications des deux anciennes validations.
Voir ici pour des instructions détaillées.
Comme toujours lorsque vous jouez avec l'histoire (comme l'écrasement de différentes validations dans une nouvelle est certainement), vous ne devez effectuer de telles opérations que sur des validations sur lesquelles personne d'autre n'est basé.