Ich habe ein Projekt unter Git-Versionskontrolle, das ich sowohl auf einem Server als auch auf meinem lokalen Computer bearbeitet habe. Ich hatte ursprünglich den Remote-Ursprung als meinen lokalen Computer festgelegt, möchte diesen nun aber in BitBucket ändern.
Auf dem Server habe ich den Befehl verwendet
git remote set-url origin bitbucket_address
Aber jetzt, wenn ich versuche, mein Projekt voranzutreiben, erhalte ich den Fehler
! [remote rejected] master -> master (shallow update not allowed)
Was verursacht das und wie behebe ich es?
git clone --depth
?shallow
In Ihrem.git
Ordner sollte sich eine Datei mit dem Namen befinden .shallow
Datei sehen.Antworten:
Wie es scheint, haben Sie
git clone --depth <number>
Ihre lokale Version geklont. Dies führt zu einem flachen Klon . Eine Einschränkung eines solchen Klons besteht darin, dass Sie ihn nicht in ein neues Repository verschieben können.Sie haben jetzt zwei Möglichkeiten:
Also, du willst deine Geschichte behalten, was? Dies bedeutet, dass Sie Ihr Repository deaktivieren müssen . Dazu müssen Sie Ihre alte Fernbedienung erneut hinzufügen.
Danach rufen wir
git fetch
den verbleibenden Verlauf von der alten Fernbedienung ab (wie in dieser Antwort vorgeschlagen ).Und jetzt sollten Sie in der Lage sein, in Ihr neues Remote-Repository zu pushen.
Hinweis : Nachdem Sie Ihren Klon deaktiviert haben, können Sie die alte Fernbedienung offensichtlich wieder entfernen.
quelle
git fetch --unshallow
eine Referenzspezifikation erforderlich sein kann, um nur einen bestimmten Zweig und nicht das gesamte Repo aufzuheben. ZB:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
war 20 Commits vor Ihrer ,oldrepo/master
wenn Sieclone --depth 1
‚es ed, und Sie haben 17 lokale Commits gemacht , da es genug ist für Sie zu tungit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(entschuldigen uns für die Off-by-one - Fehler), und dann können Sie tun ,git push oldrepo master
ohne Zwischenfälle (Möglicherweise ist Git 1.9.0 oder neuer erforderlich).Falls Ihr Repo ist
origin
und das ursprüngliche Repo istupstream
:quelle
Eine weitere Option, wenn Sie das Repo wie bei den neuen Commits beibehalten möchten, die Sie seit dem flachen anfänglichen Commit hinzugefügt haben, ist folgende: Ändern Sie dieses Commit mit einer interaktiven Rebase .
Starten Sie eine interaktive Rebase einschließlich des ersten (Root-) Commits mit
Ändern Sie die
pick
ursprünglichen Commits inedit
und speichern und schließen Sie die Datei.Wenn Sie das Repo mit einer Tiefe von mehr als 1 geklont haben, müssen Sie möglicherweise für alle diese Commits dasselbe tun. Oder führen Sie alternativ
fixup
für alle diese während der interaktiven Rebase aus.Konvertieren Sie dieses Commit in ein reguläres, nicht heiliges Commit mit
Dadurch wird auch die Festschreibungs-ID geändert und Sie werden als Co-Autor zu dieser anfänglichen Festschreibung hinzugefügt.
Vergiss nicht, deine Rebase zu beenden
quelle
Wenn Sie das neue Repo so wie es ist pushen möchten, können Sie Folgendes versuchen:
old git folder
aus Ihrem aktuellen Repo,sudo rm -rf .git
git init
git remote add your-new-repo
quelle
Wenn das Abrufen von --unshallow nicht funktioniert. Es muss einige Probleme mit Ihrer Niederlassung geben. Korrigieren Sie es mit dem folgenden Befehl, bevor Sie es drücken.
Tun Sie dies nur mit --unshallow nicht da funktioniert es eine ist SAFETY Sorge.
quelle