web-dev-qa-db-ger.com

Wie entferne ich das erste Commit in git?

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?

104
Jian Weihang

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>
194
tzi

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.

36
CharlesB

Check out zu einem temporären Zweig:

git Checkout - Orphan TEMP_BRANCH

Fügen Sie alle Dateien hinzu:

git addieren -A

Übernehmen Sie die Änderungen:

git commit -am "Initial Commit"

Löschen Sie den alten Zweig:

git-Zweig -D-Master

Benennen Sie den temporären Zweig in master um:

git-Zweig -M Master

Zum Abschluss erzwingen Sie ein Update für unser Repository:

git Push-f Origin-Master

5
Megha Sahu

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.

5
Max Beikirch

Ein anderer Weg, den Sie tun können, ist:

  1. Gehen Sie zu einem Zweig, den Sie behalten möchten (zB dev). git checkout dev
  2. Löschen Sie jetzt den Zweig, den Sie zurücksetzen möchten git branch -D master
  3. Erstellen Sie nun einen leeren Zweig mit demselben Namen 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.

2
kumar_harsh

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/
2
user1338062

Wenn Sie es gerade festgelegt haben, aber noch nicht gepusht haben, entfernen Sie einfach .git directory und git init erneut ...

0
Ali Sajid

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.

0
Mike Beaton