Ich bin gespannt, wie ich das erste Commit in Git entfernen kann.
Was ist die Überarbeitung, bevor etwas begangen wird? Hat diese Revision einen Namen oder ein Tag?
git
repository
commit
git-commit
Jian Weihang
quelle
quelle
git rebase -i --root
. Siehe die folgende SO-Antwort für Details: stackoverflow.com/questions/2246208/…git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Antworten:
Für mich ist der sicherste Weg, den folgenden
update-ref
Befehl zu verwenden:Die benannte Referenz wird gelöscht
HEAD
, sodass alle Commits Ihres aktuellen Zweigs zurückgesetzt werden (leise verlieren Sie Ihre Arbeit nicht) .Wenn Sie das erste Commit mit dem zweiten zusammenführen möchten, können Sie den folgenden
rebase
Befehl verwenden:Eine letzte Möglichkeit könnte darin bestehen, einen verwaisten Zweig zu erstellen, einen Zweig mit demselben Inhalt, jedoch ohne Festschreibungsverlauf, und Ihren neuen Inhalt darauf festzuschreiben:
quelle
Vor dem ersten Festschreiben gibt es nichts, da jedes Festschreiben auf ein übergeordnetes Festschreiben verweist. Dies macht das erste Commit zu etwas Besonderem (ein verwaistes Commit), sodass es keine Möglichkeit gibt, auf einen vorherigen "Status" zu verweisen.
Wenn Sie also das Commit korrigieren möchten, können Sie einfach
git commit --amend
Folgendes tun : Dadurch wird das Commit geändert, ohne dass ein weiteres erstellt wird.Wenn Sie nur von vorne beginnen möchten, löschen Sie das
.git
Repository und erstellen Sie ein neues mitgit init
quelle
--amend
Autor wird auch nicht richtig aktualisiert, wenn er ursprünglich falsch konfiguriert wurde. Das war es, was ich brauchte, also habe ich die akzeptierte Antwort verwendet und stattdessen einfach ein neues Commit durchgeführt.quelle
Möglicherweise möchten Sie nur Ihr erstes Commit bearbeiten (da es in einem Git-Repo immer ein erstes Commit gibt). Erwägen Sie die Verwendung
git commit --amend --reset-author
anstelle des üblichengit commit --amend
.quelle
Ich suchte nach einer Möglichkeit, alle Git-Commits von einem Repo rückgängig zu machen, als wären sie nie passiert.
Das Wiederherstellen funktioniert bis zu einem gewissen Punkt. Das allererste (chronologisch das älteste Git-Commit) wird jedoch immer problematisch sein, da es kein übergeordnetes Element hat, sodass ein Fehler auftritt.
Keine dieser Antworten hat es für mich ganz gelöst. Aber nach viel Suchen und Ausprobieren fand ich, dass dies funktioniert!
Hoffe das hilft dir. Ich wünsche ihnen einen wunderbaren Tag.
quelle
Sie können auch Folgendes tun:
git checkout dev
git branch -D master
git checkout --orphan master
Natürlich hängt dies alles von Ihrem Anwendungsfall ab, aber wenn Sie mehr als einen Zweig haben, ist das Löschen des
.git
Verzeichnisses nicht sinnvoll.quelle
Wenn Sie andere Zweige behalten möchten, aber beispielsweise den
master
Zweig ohne gemeinsamen Verlauf für andere Zweige neu starten möchten, können Sie dies sicher erreichen, indem Sie ein neues Repository erstellen und dessen Inhalt in Ihr altes Repository übertragen:Dadurch wird ein
newmaster
Zweig im alten Repository erstellt, dessen Verlauf mit keinem der anderen Zweige gemeinsam ist. Natürlich können Sie das auch einfach überschreibenmaster
mitgit push -f
.Wenn Sie alle Zweige und alle vorhandenen Inhalte zerstören möchten, führen Sie sie einfach aus
quelle
git rebase --root
ist wahrscheinlich das, was OP wollte, aber da diese Antwort zwei positive Stimmen hat, werde ich sie nicht löschen, falls jemand sie immer noch für relevant hält.Wenn Sie es gerade festgeschrieben, aber nicht gepusht haben, entfernen Sie einfach das .git- Verzeichnis und
git init
erneut ...quelle
Die Antwort auf die Frage hängt davon ab, ob:
Sie möchten das erste UND NUR Commit für einen Zweig entfernen (während andere Zweige unverändert bleiben) oder ob
Sie möchten das erste Commit für einen Zweig entfernen, während Sie die nachfolgenden Commits (und die anderen Zweige) an Ort und Stelle lassen.
Die zweite davon ist relativ einfach. Sie müssen sich im Wesentlichen auf root stützen - die meisten Antworten hier beziehen sich auf Möglichkeiten, dies zu tun.
Das zweite zu tun (das erste zu entfernen und nur aus einem Zweig festzuschreiben, während andere Zweige in Ruhe gelassen werden) ist schwieriger. Oder zumindest besonders schwierig, wenn Sie möchten, dass dies geschieht und die Änderung in GitHub oder Bitbucket wiedergegeben wird. Es gibt (soweit ich das beurteilen kann) in Git überhaupt keine Möglichkeit, einen Zweig ohne Commits zu pushen oder zu pushen. Und es gibt auch (soweit ich sehen kann) überhaupt keine Möglichkeit, einen neuen, leeren Zweig ohne Commits in GitHub oder Bitbucket zu erstellen. Sie müssen also im Wesentlichen ein neues Repository erstellen, um einen vollständig leeren Zweig zu erstellen, und dann die gewünschten Zweige (einschließlich der gewünschten Commits) wieder hinzufügen - gemäß der Antwort von @ user1338062.
Ich hoffe, diese Antwort verdeutlicht, was möglicherweise nicht offensichtlich war - dass zwei verschiedene Ansätze für zwei verschiedene (mehr oder weniger vernünftige) Szenarien gewählt werden müssen, die beide Dinge sind, die Sie möglicherweise in der richtigen Reihenfolge tun möchten das, was das OP verlangt, vollständig zu beherrschen.
quelle