2015-12-30 3 views
9

Angenommen, ich habe einen Zweig, der aus drei Commits besteht, einer von ihnen leer:Rebase auf der Wurzel und hält leer verpflichtet

# On branch test 
3208910 empty 
85c949c bar 
0c1a615 foo 

ich es auf der Wurzel und von der man-Seite rebase will es scheint, dass --root --keep-empty ist genau das, was ich brauche.

jedoch beide git rebase -i --root und git rebase -i --root --keep-empty auslassen die leere begehen und zeigen Sie mir diesen Plan statt:

pick 0c1a615 foo 
pick 85c949c bar 

Wie kann ich die gesamte Branche rebase und leer Commits zur gleichen Zeit halten?

P.S. Ich brauchte das, um ein paar erste Commits auf dem Zweig zu entfernen, und ich schaffte es, das mit filter-branch zu erreichen, wie in this SO answer beschrieben, aber ich bin immer noch interessiert zu wissen, ob rebase dazu fähig ist. Ist es ein Fehler in Git, den ich gefunden habe? Es ist schwer zu glauben, dass dieses Verhalten beabsichtigt ist, aber ich bin mir nicht sicher.

P.P.S. Ich habe festgestellt, dass ich den Plan manuell bearbeiten und pick 3208910 hinzufügen kann.

+7

Ich weiß nicht wirklich, warum:

Weitere Auskünfte abgezogen. Aber es hat mit der "--root" Flagge zu tun, die Sie verwenden. Dasselbe auf einem Zweig zu tun - 'git rebase -i --keep-empty master' scheint zu funktionieren wie erwartet. –

+4

'git rebase -i --root - keep-empty --preserve-merges' funktioniert auch aus irgendeinem Grund. Die 'root'-Option ist wirklich seltsam, ich verstehe nicht, was dort passiert ... – poke

+3

@poke: wahrscheinlich nur ein Fehler ...' root' funktioniert intern, indem man das "auf" -Ziel auf den leeren Baum setzt, Das ist kein Commit sondern funktioniert für Cherry-Pick. Es ist nicht sofort offensichtlich, was, aber ohne die Preserve-Merge-Einstellung, etwas entfernt den Pick-Befehl für die Empty-Diff-Commit, vielleicht weil der Unterschied selbst ist ein leerer Baum und daher entspricht $ auf. – torek

Antwort

Verwandte Themen