2014-01-15 11 views
7
rebase

ich folgenden Fall habe:Git von einem Ast zum anderen

      K---L new-feature 
         /
       H---I---J dev-team1 
      /
       E---F---G dev-main 
      /
A---B---C---D master 

Und ich möchte nur das neue Feature (K --- L) Niederlassung in dev-main Zweig bewegen ohne (H --- I --- J) Form dev-team1

   H---I---J dev-team1 
      /
       E---F---G---K---L dev-main 
      /
A---B---C---D master 

Antwort

10

git rebase hat ein --onto Argument, das tut, was Sie brauchen.

git checkout new-feature 
git rebase --onto dev-main dev-team1 

# Now new-feature has commits K' and L' after G in dev-main. 
git checkout dev-main 
git merge --ff-only new-feature 

Weitere Informationen finden Sie unter man page for "git rebase". (Ich mag auch eine -i nur zu überprüfen hinzufügen, dass ich die Commits bin bewegt, dass ich glaube, ich bin.)

Sie auch git cherry-pick verwenden könnte, vor allem, wenn die Zahl der Commits klein ist:

git checkout dev-main 
git cherry-pick K L 
+0

Vergessen Sie nicht, dass cherry-pick eine Reihe von Commits unterstützt – onionjake

1

Sie können cherry-pick K und L verpflichtet.

git checkout dev-main 
git cherry-pick K 

Wenn Sie Konflikte haben, fixieren die sie und tun

git cherry-pick --continue 
git cherry-pick L 

die Konflikte beheben.

Sie können auch interaktive Rebase verwenden.

git rebase -i head~5 

Im geöffneten Editor ersetzen H I und J Linien begeht mit

pick F 
pick G 
+0

Sie können Codeblöcke in Ihren Antworten und Fragen erstellen, indem Sie vor jeder Codezeile einen Einzug mit vier Leerzeichen einfügen. – LopSae

Verwandte Themen