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