2017-08-18 1 views
-1

TL; DR: es ist ein 6 Jahre altes Commit und ich will es einfach weg, ich glaube es ist leer und ich möchte es entfernt haben.Gibt es eine Möglichkeit, ein sehr altes Commit von git tree sauber zu entfernen?

dh die am unteren Ende zu begehen:

[a few thousand commits on top of this] 
* 08d01075 - (5 years ago) 
|\ 
| * 2da4e798 - (5 years ago) 
| |\ 
| |/ 
|/| 
* | f29c0523 - (5 years ago) 
* | a9a851d7 - (5 years ago) 
* | d8e70b9b - (5 years ago) 
| * 84a54eff - (5 years ago) new branch 
| |\ 
| |/ 
|/| 
* | 022bca02 - (6 years ago) 
* | 79a5d079 - (6 years ago) 
* | 5a89f05a - (6 years ago) 
* | f02cc7f0 - (6 years ago) 
* | 645ffc64 - (6 years ago) 
* | 9693b596 - (6 years ago) 
/
* 55555555 - (5 years ago) the null commit 

Die 55555555 ist diejenige, die ich

Ich weiß nicht entfernen will, wie real diese begehen, weil dies:

$ git diff 55555555^ 55555555 
fatal: ambiguous argument '55555555 ^': unknown revision or path not in the working tree. 
Use '--' to separate paths from revisions, like this: 
'git <command> [<revision>...] -- [<file>...]' 

Oder

$ git show --no-patch 2bb15d71 
commit 5555555 
Author: ......... 
Date: Tue Mar 12 11:01:54 2012 

the null commit 
+2

... Warum? Was nützt es, das zu entfernen (und dann jedes einzelne Commit, das darauf folgt ** zu ändern), wirklich für dich? – Makoto

+0

Wie Makoto erklärt, bedeutet die Berechnung von Git-Hashes, dass das Entfernen dieses Commits eine erneute Berechnung der Hashwerte für jedes weitere Commit erfordert. Sie brauchen wirklich einen guten Grund, dies zu tun, da es jede andere Kopie des Baumes ungültig macht. – Phylogenesis

+0

Das einzig erkennbare Gute, das ich sehen kann, ist, meine Seele und meinen Sinn für Ordentlichkeit attraktiver zu machen. Wenn es erforderlich ist, alles herunterzureißen, nehme ich an, dass es sich nicht lohnt. – Dennis

Antwort

0

Sie wollen das wahrscheinlich nicht, wie in den Kommentaren erwähnt.

Aber, wenn Sie sicher sind, dass Sie das tun, können Sie eine interaktive rebase laufen:

git rebase -i --root

-i ist ein Schalter für interaktives Unterfütterungsmaterial.

--root ist das erste Commit überhaupt.

Löschen Sie die Zeile des Commits, das Sie entfernen möchten, und speichern Sie sie.

Das Problem mit dieser Technik besteht darin, dass das Commit auf anderen Contributor-Computern verbleibt und an den Remote-Repo übertragen wird, wenn sie eine Änderung vornehmen, es sei denn, sie folgen den gleichen Schritten wie Sie. Wenn Sie alleine arbeiten, sollte das funktionieren.

+0

Es ist keine gute Idee, dies mit 'git rebase -i --root' aus einem anderen Grund zu tun: rebase kann keine Merge-Commits kopieren und entfernt standardmäßig alle Merges. Das Hinzufügen von '--preserve-merges' versucht, Merges erneut durchzuführen, aber das funktioniert schlecht mit einer tatsächlichen Bearbeitung von' Pick'-Befehlen in einer interaktiven Rebase, also ist das eigentlich noch schlimmer. :-) – torek

Verwandte Themen