2017-01-02 2 views
5

Meine Geschichte Baum zur Zeit wie folgt aussieht: enter image description heregit: commit bewegen, bevor fusionieren

Ich mag würde anzuwenden begehen b3 zu Zweig Master. Natürlich konnte ich wieder feature in master verzweigen fusionieren, aber die Geschichte wird mit zwei merge verpflichtet (a6 und a4, dass jetzt nur nutzlos ist) unordentlich aussehen: enter image description here


So was ich weiß, möchte, ist wie man a4 machen jetzt Punkt auf b3 statt b2? enter image description here Ich erkennen SHA1 s wird anders sein, und begehen somit wird a4' und a5'

+1

vom Master, tut 'git -p b3' rebase. Das sollte die Zusammenführung beibehalten, aber nach 'b3' verschieben. – poke

+0

@poke thx! Sollte ich auf "a4" stehen, oder funktioniert es, wenn ich auf "a5" stehe? – ebo

+0

Es sollte auf beide von denen funktionieren. – poke

Antwort

2

Von dem Master-Zweig umbenannt werden, können Sie einfach auf die neuen b3 rebase während verschmilzt Erhaltung mit den --preserve-merges option (oder -p in kurz):

git rebase -p feature 

diese Weise, wenn Git Rebasing, wird es nicht versuchen, die Zusammenführung zu glätten, sondern sie verpflichten oben auf der neuen Basis neu zu erstellen. So Ihre Geschichte wird wie folgt aussehen:

       master 
           ↓ 
a1 -- a2 -- a3 --------- a4' -- a5' 
     \    /
     \   /
      b1 -- b2 -- b3 
         ↑ 
        feature 

die folgenden Vergleich, wenn nicht die --preserve-merges Flags verwendet:

         master 
             ↓ 
a1 -- a2     a3' -- a4' -- a5' 
     \    /
     \   /
      b1 -- b2 -- b3 
         ↑ 
        feature 
+0

OP sollte (und ich sehe, tat) merken, dass das Ergebnis eine neue (andere) Zusammenführung ist, mit verschiedenen Hash-und anderen Baum. Wie du sagst, rebase re * erzeugt * (d. H. Mache ein * neues *) merge, das das alte ersetzt. Wie auch immer, upvoted. :-) – torek

+1

@torek Ja, ich benutze den 'x''-Begriff, um anzuzeigen, dass es ein neu erstelltes Commit ist, das auf dem ursprünglichen 'x' basiert :) – poke