Ich bin gespannt, wie man das erste Commit in git entfernt.
Was ist die Überarbeitung, bevor etwas festgelegt wird? Hat diese Revision einen Namen oder ein Tag?
Für mich ist der sicherste Weg der Befehl update-ref
:
git update-ref -d HEAD
Es wird die benannte Referenz HEAD
löschen, damit es alle Ihre Commits Ihres aktuellen Zweigs zurücksetzt (leise, Sie verlieren Ihre Arbeit nicht).
Wenn Sie das erste Commit mit dem zweiten Commit zusammenführen möchten, können Sie den Befehl rebase
verwenden:
git rebase -i --root
Ein letzter Weg könnte sein, einen verwaisten Zweig, einen Zweig mit demselben Inhalt, jedoch ohne Festschreibungsverlauf, zu erstellen und den neuen Inhalt darauf festzuschreiben:
git checkout --Orphan <new-branch-name>
Vor dem ersten Commit gibt es nichts, da jedes Commit auf ein übergeordnetes Commit verweist. Dies macht das erste Commit speziell (ein Orphan-Commit), daher gibt es keine Möglichkeit, auf einen vorherigen "Zustand" zu verweisen.
Wenn Sie also das Festschreiben korrigieren möchten, können Sie einfach git commit --amend
: Dies ändert das Festschreiben, ohne ein weiteres zu erstellen.
Wenn Sie nur von vorne beginnen möchten, löschen Sie das .git
-Repository und erstellen Sie ein anderes mit git init
.
git Checkout - Orphan TEMP_BRANCH
git addieren -A
git commit -am "Initial Commit"
git-Zweig -D-Master
git-Zweig -M Master
git Push-f Origin-Master
Sie möchten vielleicht nur Ihr erstes Commit bearbeiten (da in einem Git-Repo immer ein erstes Commit vorhanden ist). Erwägen Sie die Verwendung von git commit --amend --reset-author
anstelle des üblichen git commit --amend
.
Ein anderer Weg, den Sie tun können, ist:
git checkout dev
git branch -D master
git checkout --Orphan master
Natürlich hängt das alles von Ihrer Anwendung ab. Wenn Sie jedoch mehr als einen Zweig haben, ist das Löschen des Verzeichnisses .git
nicht sinnvoll.
Wenn Sie andere Zweige beibehalten möchten, aber zum Beispiel den Zweig master
ohne gemeinsamen Verlauf für andere Zweige neu starten möchten, können Sie dies auf sichere Weise erreichen, indem Sie ein neues Repository erstellen.
cd ..
git init newrepo
cd newrepo
# make some initial commits
git Push ../oldrepo master:newmaster
Dadurch wird eine newmaster
-Verzweigung im alten Repository erstellt, wobei der Verlauf mit keinem der anderen Zweige gemeinsam ist. Natürlich können Sie die master
auch einfach mit git Push -f
überschreiben.
Wenn Sie alle Zweige und alle vorhandenen Inhalte zerstören möchten, führen Sie einfach die Ausführung aus
rm -rf .git/
Wenn Sie es gerade festgelegt haben, aber noch nicht gepusht haben, entfernen Sie einfach .git directory und git init
erneut ...
Die Antwort auf die Frage hängt davon ab, ob:
Sie möchten das erste AND ONLY-Commit für einen Zweig entfernen (während Sie andere Zweige unverändert lassen), 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 belassen.
Die zweite davon ist relativ einfach. Sie müssen im Wesentlichen auf root zurückgreifen - die meisten Antworten hier beziehen sich auf Möglichkeiten, dies zu tun.
Es ist schwieriger, den zweiten Schritt durchzuführen (den ersten zu entfernen und nur von einem Zweig zu übernehmen, während andere Zweige in Ruhe gelassen werden). Oder zumindest, besonders dann, 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 erzwingen. 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 - wie in der Antwort von @ user1338062 angegeben.
Daher hoffe ich, dass diese Antwort verdeutlicht, was möglicherweise nicht offensichtlich war - dass zwei verschiedene Ansätze für zwei verschiedene (mehr oder weniger vernünftige) Szenarien erforderlich sind, die beide Dinge sind, die Sie vielleicht wollen in der Lage sein zu tun, um das, was das OP verlangt, vollständig zu beherrschen.