web-dev-qa-db-fra.com

Git: déplacer un commit "en haut"

Disons que dans master j'ai une fonctionnalité désactivée. Je travaille sur cette fonctionnalité sur la branche feature, j'ai donc un commit spécial $ là qui active simplement cette fonctionnalité. Maintenant, je veux fusionner les modifications que j'ai apportées dans feature dans master, mais garder la validation d'activation. C'est comme

main:    A--B--X--Y
feature: A--B--$--C--D

Disons que je veux le faire, en déplaçant le $ commit en plus de la fonctionnalité:

new feature: A--B--C--D--$

Comment pourrais-je procéder?

29
Adrian Panasiuk

git rebase -i B, puis déplacez $ à la fin de la liste qui apparaît dans votre éditeur. Il commencera comme la première ligne du fichier qui s'ouvre. Vous pouvez également supprimer complètement cette ligne, ce qui supprimera simplement cette validation de l'historique de votre branche.

25
Carl Norum

Si vous souhaitez conserver vos validations dans le même ordre sur feature, vous devez créer une nouvelle branche et effectuer les opérations suivantes. Sinon, faites-le sur feature

git rebase -i <sha for commit B>

Déplacer commit $ en bas de la liste

git checkout master
git rebase feature <or the other branch name>

La question n'était pas claire pour moi, mais si vous ne vouliez pas du tout de $, plutôt que de le déplacer, supprimez-le après git rebase -i Bien que vous souhaitiez le faire sur une nouvelle branche pour ne pas la perdre. Alors que vous changez l'histoire.

Cela suppose également que la branche feature n'a pas été poussée vers une télécommande car l'historique de réécriture est mauvais.

6
Schleis