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.
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. –
'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
@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