2010-11-08 3 views
18

J'ai effectué un certain nombre de modifications sur la branche master de mon dépôt git, et je l'ai poussé en amont (bien que je sois le seul à travailler dessus.) Ce que je veux faire est de retirer ces derniers commits, de ramener le maître à avant que le commit ne soit validé, de réappliquer les commits sur la branche de développement, puis de revenir sur le maître.Le déplacement d'une branche à une autre

Voici ce que mon dépôt ressemble maintenant:

a [master] [remotes/origin/master] 
| 
b 
| 
c 
| 
d (merge branch 'develop') 
|\ 
| \ 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Et voici ce que je veux que ça ressemble à:

Z [master] [remotes/origin/master] 
|\ 
| \ 
| A 
| | 
| B 
| | 
d C 
|\ | 
| \| 
| e [develop] [remotes/origin/develop] 
| | 
q f 
| | 
r g 

Puis-je obtenir de l'aide à ce sujet? Je pense que c'est un travail pour rebase, mais je ne suis pas sûr de savoir comment y arriver.

+5

Vos diagrammes me confondre pour un peu - dans le futur, vous pourriez vouloir étiqueter vos commits dans l'ordre chronologique au lieu de renverser. – Cascabel

Répondre

27

Vous êtes:

# move cba onto e 
git branch foo 
git rebase --onto <SHA1-e> <SHA1-d> foo 

# rewind master to d 
git checkout master 
git reset --hard <SHA1-d> 

# merge 
git merge foo 

Vous pouvez choisir un nom de branche plus descriptif que foo, car il sera enregistré dans la fusion message de validation pour Z.

+0

Merci, c'est ce dont j'avais besoin. J'y arrivais à mi-chemin, mais la réinitialisation était ce qui me manquait. – Doug

Questions connexes