Die prune-empty
Option von git filter-branch
nicht erwähnt:
dieser Schalter nur für Commits gilt, dass ein und nur ein Elternteil haben
Wenn Ihr geändertes begehen wurde „am Anfang des master
Zweig ", es hat 0 Eltern.
Diese besondere Commit, auch leer, wird nicht beschnitten werden.
Wenn Sie geändert wurde commit "am Anfang eines Zweigs",
beginning of a branch b
|
v
--x--Y--z--z
\
b--b
it should be pruned nur, wenn dieser leer begehen ist identisch mit dem vorherigen begehen.
Als torekmentions here: *
ein „leeres commit“ ist wirklich eine, die den gleichen Baum wie die vorherige hat begehen: Es ist nicht, dass es überhaupt keine Dateien hat, dann ist es, dass es alles hat die gleichen Dateien, mit den gleichen Modi und den gleichen Inhalten wie die Eltern-Commits.
Dies liegt daran, dass git vollständige Snapshots für jedes Commit speichert, nicht Unterschiede von einem Commit zum nächsten.
Wie der doc sagt:
Irgendeine Art von Filter leer Commits generieren, dass den Baum unberührt gelassen.
So ein Commit mit „0 Dateien“ ist nicht ein „leeres commit“ aus der Sicht der Filter-Zweig, es sei denn, die Eltern verpflichten auch hat „0 Dateien“ (dh die gleiche empty "semi-secret" tree)
Titel geändert, hinzugefügt ... am Anfang der Verzweigung. –
@ AndersLindén Ich habe die Antwort bearbeitet, um den Fall "Anfang eines Zweigs" zu adressieren, was mich dazu brachte, den Begriff "leeres Commit" erneut zu betrachten. – VonC
Es scheint wie das Commit, das nur die .gitignore-Datei vor dem Git-Filter-Zweig hatte ist jetzt in allen Sinnen leer. Aber Sie haben darauf hingewiesen, dass "dieser Schalter nur für Commits gilt, die nur einen Elternteil haben". Sollte die Funktion nicht geändert werden auf "Dieser Schalter gilt nur für Commits mit einem Elternteil oder ist der initiale Commit"? –