2010-04-23 19 views
5

I commited(nicht gedrückt) viele Dateien lokal (binäre Dateien zu entfernen & einschließlich Hinzufügen ...) und jetzt, wenn ich versuche zu schieben es viel Zeit in Anspruch nimmt. Eigentlich habe ich meine lokale Repo-Geschichte vermasselt.Wie kann ich Dateien dauerhaft aus dem Verlauf entfernen (löschen)?

Wie könnte ich diesen Fehler in Zukunft vermeiden? Kann ich einen Satz lokaler Revision 1-> 2-> 3-> 4 in 1-> 2 transformieren, wobei 2 die letzte Revision des lokalen Klons ist?

bearbeiten: da ich in Eile war habe ich mit Revision 4 ein neues Remote Repo von Grund auf neu gestartet. In Zukunft werde ich mit der markierten Antwort gehen, da es einfacher scheint, aber ich werde andere Lösungen graben um die Wahrheit zu sehen. Danke für Ihre Unterstützung.

Antwort

1

Mercurial Geschichte ist unveränderlich, Sie können nicht mit den normalen Tools löschen. Sie können, schaffen jedoch eine neue Repo ohne diese Dateien:

$ hg clone -r 1 repo-with-too-much new-repo 

, die null und eins aus der alten Repo nur Revisionen nimmt und setzt sie in einen neuen Repo. Kopieren Sie nun die Dateien aus Revision vier in den neuen Repo und Commit.

Das wird diese Interstitial Changesets los, aber jedes Repo, das Sie dort draußen in der Wildnis haben, hat sie immer noch, also wenn Sie pull bekommen, werden Sie sie zurückbekommen.

Im Allgemeinen, sobald Sie einen Changeset geschoben haben, ist es da draußen und wenn Sie nicht jeden mit einem Klon dazu bringen können, ihn zu löschen und zu reklonieren, haben Sie kein Glück.

2

Es ist nicht klar aus Ihrer Frage, ob diese Änderungen vorangetrieben wurden. Wenn sie noch lokal sind, können Sie sie mehr oder weniger leicht loswerden. konvertieren ist eine Option. Sie können auch MQ (Merkurwarteschlangen) verwenden. Weitere Informationen finden Sie im Wiki-Artikel EditingHistory. Es empfiehlt, dass MQ der einfachste Ansatz ist.

diese Art von Fehler zu vermeiden, sollten Sie vielleicht einen Haken hinzufügen ‚schlecht‘ verpflichtet abzulehnen, da man sie programmatisch beschreiben kann; nur)

+0

Ich benutze Mercurial die db meiner Anwendung zu speichern, so dass ich .hgignored alle Bits der db und commited nur ein Glas. – amirouche

Verwandte Themen