396 votes

GIT : Comment "écraser", plutôt que "fusionner", une branche sur une autre branche ?

J'ai deux branches, email et staging. Staging est la plus récente et je n'ai plus besoin des anciennes modifications dans la branche 'email', mais je ne veux pas les supprimer. Je veux donc simplement vider tout le contenu de 'staging' dans 'email' pour qu'elles pointent toutes deux vers le même commit. Est-ce possible ?

322voto

knittl Points 64110

Vous pouvez utiliser la stratégie de fusion "ours" :

$ git checkout staging;
$ git merge -s ours email; # merge branches, but use our branch head

135voto

Sylvain Defresne Points 15231

Si vous voulez simplement que les deux branches 'email' et 'staging' soient identiques, vous pouvez étiqueter la branche 'email', puis réinitialiser la branche 'email' sur la branche 'staging' :

$ git checkout email
$ git tag old-email-branch
$ git reset --hard staging

Vous pouvez aussi rebaser la branche 'staging' sur la branche 'email'. Mais le résultat contiendra la modification des deux branches.

75voto

Shyam Habarakada Points 2360

Les autres réponses m'ont donné les bons indices, mais n'ont pas permis de résoudre complètement le problème.

Voici ce qui a marché pour moi :

$ git checkout email
$ git tag old-email-branch # this is optional
$ git reset --hard staging
$ git merge -s ours origin/email 
$ git push origin email

Sans la 4e étape de fusion avec la nôtre, le push est considéré comme une mise à jour non rapide et sera rejeté (par GitHub).

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