2009-09-09 5 views
98

J'ai commencé à travailler sur ce que je pensais être une correction mineure sur ma branche principale. Cependant, il est devenu incontrôlable au point où j'aimerais avoir créé une branche distincte pour faire le développement en premier lieu.Prenez toutes mes modifications sur la branche actuelle et déplacez-les vers une nouvelle branche dans Git

Donc maintenant ce que je voudrais faire est la suivante:

  1. Créer une nouvelle branche appelée (par exemple) « bord »
  2. Déplacer tous les fichiers modifiés/trassez sur maître à bord (tels que maître est inchangé par rapport à quand j'ai commencé le correctif de bug)
  3. Terminer mon travail sur le bord, fusionner dans master

Comment puis-je faire cela?

Répondre

93

Si vous n'avez encore rien engagé, vous êtes déjà dans la bonne position.

  1. Créer une nouvelle branche: git checkout -b edge
  2. Vos fichiers ont pas changé. Juste git add ce qui doit et commettre comme d'habitude.
  3. Lorsque vous avez terminé de valider sur edge, revenez à master avec git checkout et git merge edge.
+0

n'a pas commis encore rien, de sorte que la première ligne était bienvenu ... ouf, qui était en fait assez indolore :-) – Ryan

86

Pour ajouter à la réponse de JB, si vous avez déjà a commencé à faire quelques commits sur maître pour ce qui a fini comme un effort « de bord », vous pouvez:

git stash 
git checkout -b edge master 
git branch -f master SHA1_before_your_commits 
git stash apply 
+0

l'emballage stash est pas strictement nécessaire, mais juste pour les changements de travail non engagés à droite? – HaveAGuess

+4

@HaveAGuess à droite. Par "prendre toutes mes modifications", j'ai également inclus les changements actuels non-encore-ajoutés. D'où la cachette. – VonC

+1

merci (voté) – HaveAGuess

13

Si vous essayez de déplacer le travail du maître à une branche qui existe déjà, mais qui est derrière le maître, git ne vous laissera pas passer à l'autre branche. Dans ce cas, faites ceci:

git stash 
git checkout oldBranch 
git merge master 
git checkout master 
git stash apply 
git checkout oldBranch 
Questions connexes