2016-07-28 9 views
1

I 2 Zweige haben, sagen Sie „branch_1“ und „branch_2“ wie folgt:Wie eine geänderte Fassung holen begehen aus einem anderen Zweig

A <--master 
\ 
B <--branch_1 
    \ 
    C <--branch_2 

Jetzt mache ich eine Änderung in branch_1 und ändern die HEAD begehen. So, jetzt sieht das Setup wie:

A <--master 
|\ 
| B_amended <--branch_1 
| 
B---C <--branch_2 

Ein git log auf branch_1 zeigt begehen B_amended auf dem Kopf von A. begehen Ein git log auf branch_2 zeigt commit B und C auf dem Kopf von A. Commit Commit B on branch_2 enthält keine geänderten Änderungen von commit B_amended auf branch_1.

Meine Frage ist: Wie bringe ich B_amended in branch_2, damit es so aussieht?

A <--master 
\ 
B_amended <--branch_1 
    \ 
    C <--branch_2 

Im Moment bin ich tun:

$ git checkout branch_2 
$ git reset --soft HEAD~ 
$ git stash 
$ git rebase branch_1 
$ git stash apply 
$ git commit 

Gibt es eine bessere Methode?

+0

Wenn Sie "B" geändert haben, hat es es für keinen Zweig geändert, der es in seiner Geschichte hat? Mit anderen Worten, ist Ihre Frage wirklich notwendig? –

+0

Ich verstehe deine Diagramme nicht. Warum gibt es mehrere 'A's und' B's? Nachdem "B" geändert wurde (wodurch ein neues "B_amended" erzeugt wird), wird "C" nicht automatisch "B_amended" als Elternelement erhalten. Könnten Sie das klären? – Svante

+0

Ja, ich sah das und nahm an, dass es ein Fehler war und B von A und C von B abhing. – DavidN

Antwort

-1

Ich habe eine bessere Methode finden: Führen Sie ein interaktives Fütterungsmaterial und lösche Commit "B" von "branch_2".

So nach "B_amended" in "branch_1", gehen Sie wie folgt vor:

$ git checkout branch_2 
$ git rebase branch_1 -i 

Im Editor, das erscheint, löschen die Zeile, die das Äquivalent von sagt:

pick B 

Speichern und beenden

Dies wird im Wesentlichen nur "C" über "B_amended" wiedergeben.

2

In Ihrem Fall können Sie einfach checkout branch_1 und git cherry-pick branch_2 prüfen, was das C-Commit auf die Spitze Ihres branch_1 und git reset --soft branch_2 zieht, um branch_2 auf dieses letzte Commit zu setzen.

Sie können auch ein Fütterungsmaterial tun (die gerade nach vorne wahrscheinlich ist), git rebase --onto branch_1 branch_2~1 branch_2

Von git merge --help:

First let's assume your topic is based on branch next. For example, a feature developed in topic depends on 
    some functionality which is found in next. 

      o---o---o---o---o master 
       \ 
       o---o---o---o---o next 
            \ 
            o---o---o topic 


We want to make topic forked from branch master; for example, because the functionality on which topic 
    depends was merged into the more stable master branch. We want our tree to look like this: 

      o---o---o---o---o master 
       |   \ 
       |    o'--o'--o' topic 
       \ 
       o---o---o---o---o next 

    We can get this using the following command: 

     git rebase --onto master next topic 

    Another example of --onto option is to rebase part of a branch. If we have the following situation: 

            H---I---J topicB 
           /
         E---F---G topicA 
         /
      A---B---C---D master 

    then the command 

     git rebase --onto master topicA topicB 

    would result in: 

         H'--I'--J' topicB 
        /
         | E---F---G topicA 
         |/ 
      A---B---C---D master 

    This is useful when topicB does not depend on topicA. 
Verwandte Themen