2010-10-25 14 views
2

De master, j'ai créé une branche A parce que je voulais ajouter une nouvelle fonctionnalité. Après avoir terminé la fonctionnalité, j'ai tout commis jusqu'à ce point. Mais alors j'ai continué à travailler sur la branche, et maintenant réaliser toutes les choses que j'ai faites depuis que ce commit aurait un sens plus logique dans une nouvelle branche, appelez-la B, hors de maître.Git Branch Workflow Dilemma

Maintenant, je peux évidemment valider mes modifications sur A, les placer dans master, puis les branches, les appeler B et continuer. Mais que se passe-t-il si je veux vraiment garder les choses propres et préfèrerais tirer mon dernier commit de A en master, puis créer une branche B, puis récupérer mes changements non validés que j'ai dans A maintenant?

+0

Créez simplement la branche B à partir de A et passez à celle-ci. Vos changements non validés seront également dans B, alors il suffit de les commettre à B. – Calvin

Répondre

3

A partir de ce que vous avez dans la branche A:

git stash   # save your changes away 
git checkout master # check out the master branch 
git merge A   # merge your changes from branch A 
git pull --rebase # This is to get rid of the 'Merged branch A' log entry 
git checkout -b B # create and checkout branch B from current master 
git stash pop  # get back the changes you saved 

et vous serez dans votre branche nouvellement créée B avec vos modifications UNCOMMITED.

2

Vous pouvez fusionner et créer des branches à partir de points de départ arbitraires, et pas seulement la tête d'une certaine branche. Voir les options liées à <start-point> dans the docs for git branch. En ce qui concerne la fusion de A dans le maître au moment où vous avez commencé à travailler sur B, le git merge command accepts any commit as an argument (encore une fois, pas seulement le HEAD d'une branche). Revenez dans les journaux de cette branche, recherchez l'ID de validation du point où le travail sur A a terminé et vous avez commencé à travailler sur la fonctionnalité B, maître de la commande, puis fusionnez avec cet ID.