43 votes

git: comment faire pour déplacer certains s'engage vers une nouvelle branche

J'ai travaillé dans la ligne droite:

A---B---C---D---E---F (master:HEAD)

Maintenant, je veux revenir en arrière:

git checkout C

et déplacer quelques dernier s'engage à une nouvelle branche:

Option 1:

          D---E---F (new:HEAD)
         /
A---B---C (master)

Option 2:

          F (new:HEAD)
         /
A---B---C (master)

Comment rebase pour l'Option 1 et de la façon de l'Option 2?

71voto

Novelocrat Points 12126

Pour obtenir à partir de votre premier diagramme (maître TÊTE = = F) pour l'option 1:

git branch new        # Make a 'new' branch pointing at HEAD, which is F
git reset --hard C    # Move master back to point at C
git checkout new      # Make HEAD follow new, and get F in the working tree

Et à partir de l'option 1 option 2 (reprenant là où le ci-dessus à gauche à l'arrêt),

git rebase -i master  # Start the process of re-jiggering this branch
# edit the commit list that opens up to only include F
# save and exit
# resolve potential conflicts from missing changes in D and E

Pour aller directement à partir de votre point de départ pour l'option 2:

git checkout -b new C  # Start the 'new' branch at C
git cherry-pick F      # Include F on it
git checkout master    # Switch back to master
git reset --hard C     # Rewind master to the earlier commit

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