GitHub

Commits in einem GitHub-Repository initialisieren

Stellt eine Methode vor, die die Option 'orphan' von 'git checkout' verwendet, die verwendet werden kann, wenn Sie einige Bearbeitungsverläufe übertragen haben, die Sie in einem Git-Repository nicht gesehen haben möchten, und Sie das Repository in seinem aktuellen Zustand als 'ersten Commit' an GitHub remote pushen möchten.

Shou Arisaka
3 Min. Lesezeit
27. Sept. 2025

Nachdem Sie ein Git-Repository remote an GitHub gesendet und es geteilt haben, gibt es aus irgendeinem Grund - zum Beispiel gibt es einen Tippfehler in der readme.md-Datei und Sie haben nur eine kleine Änderung vorgenommen, oder Sie haben einige Bearbeitungsverläufe übertragen, die Sie nicht gesehen haben möchten - möchten Sie vielleicht das Repository in seinem aktuellen Zustand als “ersten Commit” an GitHub remote pushen.

Ich werde eine Methode vorstellen, die in solchen Fällen verwendet werden kann.

Wir verwenden die Option “orphan” von “git checkout”. Mit der Option “orphan” erstellen Sie virtuell einen Branch, als ob Git initialisiert wäre, ohne frühere Commits, und indem Sie mit “git commit” auf diesem virtuellen Branch committen, wird dieser Commit als erster Commit auf diesem Branch registriert. Kurz gesagt, es ist ein Branch zum Erstellen eines Branches, der den ersten Commit macht, während frühere Commits ignoriert werden.

git checkout --orphan tmp02

Wenn Sie mit der orphan-Option auschecken, wird der Branch nicht sofort nach Ausführung des Befehls in “branch” angezeigt. Dies ist beabsichtigt.

$ git branch
  main
  tmp

Der aktuelle tatsächliche Branch ist jedoch “tmp02”. Führen Sie “git log” aus, um zu bestätigen, dass es keine früheren Commits gibt, was zu einem Fehler ohne Commits führt.

$ git log
fatal: your current branch 'tmp02' does not have any commits yet

Wenn Sie den Status mit “git status” überprüfen, ist es dasselbe. Wenn es bereits frühere Commits gäbe, wären die angezeigten Dateien “change”, aber hier sind sie “new file”.

$ git status
On branch tmp02

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   main.user.js
        new file:   readme.md

Lassen Sie uns committen.

git add .
git commit -m .

Überprüfen Sie nach dem Committen den Branch erneut mit “git branch”. Erst jetzt erscheint “tmp02” im Branch.

$ git branch
  main
  tmp
* tmp02

Nun, das Folgende ist der Prozess der Initialisierung des lokalen Git-Repositorys. Der folgende Befehl “-D” löscht den “main”-Branch. Seien Sie vorsichtig, da frühere Commits verloren gehen.

git branch -D main

Nachdem die Commits gelöscht wurden, kopieren und verschieben Sie den tmp02-Branch zum main-Branch.

git checkout -b main

Pushen Sie zum GitHub-Remote-Repository mit “git push”. Seien Sie vorsichtig, da dies Commits im Remote-Ziel überschreibt und löscht.

git push -f origin main:main

Wenn Sie ohne die Option “-f” —force pushen, erhalten Sie einen Fehler. Dies liegt daran, dass der Fortschritt des Remote-Repositorys und des lokalen Repositorys unterschiedlich ist (das Remote hat frühere Commits, aber das lokale hat nur 1 Commit). Die Option —force überschreibt und pusht dies.

$ git push -u origin main
Username for 'https://github.com': yuis-ice
Password for 'https://[email protected]':
To https://github.com/yuis-ice/alc-plus.js.git
 ! [rejected]        main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/yuis-ice/alc-plus.js.git'
hint: Updates were rejected because the tip of your current branch is behind

Alternativ können Sie es gut machen, ohne den Branch zu main zu ändern, indem Sie die lokale Branch-Spezifikation in “git push” ändern.

git push -f origin tmp02:main

Diesen Artikel teilen

Shou Arisaka 27. Sept. 2025

🔗 Links kopieren