Während git rebase origin/development
der folgenden Fehlermeldung wird von Git angezeigt:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Meine Git-Version ist 2.9.0. In der vorherigen Version funktionierte es einwandfrei.
Wie kann ich diese Rebase fortsetzen und nicht verwandte Historien mit der in der neuen Version eingeführten erzwungenen Flagge zulassen?
git-rebase
Situation, während die Antwort eine Flagge fürgit-merge
git pull [repo URL]
anstelle vongit clone [repo URL]
Antworten:
Das Standardverhalten hat sich seit Git 2.9 geändert:
Weitere Informationen finden Sie im Git-Release-Änderungsprotokoll .
Sie können verwenden
--allow-unrelated-histories
, um die Zusammenführung zu erzwingen.quelle
--allow-unrelated-histories
dauerhaft aktiviert wird ?git pull
. War in diesem "seltenen Ereignis, das die Geschichte zweier Projekte zusammenführt, die ihr Leben unabhängig voneinander begonnen haben".git --work-tree="." pull --allow-unrelated-histories
In meinem Fall trat der Fehler nur
fatal: refusing to merge unrelated histories
bei jedem Versuch auf, insbesondere bei der ersten Pull-Anforderung nach dem Remote-Hinzufügen eines Git-Repositorys.Die Verwendung des
--allow-unrelated-histories
Flags funktionierte mit einer Pull-Anfrage folgendermaßen:quelle
git clone
.Versuchen Sie den folgenden Befehl:
Dies sollte Ihr Problem lösen.
quelle
Ich habe diesen Fehler erhalten, als ich zuerst ein lokales Repository eingerichtet habe. Dann bin ich zu GitHub gegangen und habe ein neues Repository erstellt. Dann rannte ich
Wenn ich versuchte zu drücken oder zu ziehen, bekam ich
fatal: unrelated_histories
jedes Mal den gleichen Fehler.So habe ich es behoben:
quelle
.git
Ordner gelöscht , ausgeführtgit init
und das getan, was Adithya gesagt hat, mit Ausnahme des Zusammenführungsteils.Geben Sie dazu den folgenden Befehl ein:
Zum Beispiel,
Referenz:
GitHub nicht verwandte Historien Problem
quelle
Sie werden zu einem Vim-Bearbeitungsfenster weitergeleitet:
git push --set-upstream origin <branch>
quelle
:x<Enter>
wirdIch hatte das gleiche Problem. Versuche dies:
quelle
Versuchen
git pull --rebase development
quelle
git pull --rebase=preserve --allow-unrelated-histories development
newOrigin branch
anstattdevelopment
), wird das anfängliche Commit oben in meinem lokalen Zweig hinzugefügt, wodurch fast alles effektiv entfernt wird. Ich wollte, dass das anfängliche Commit von der neuen Fernbedienung ganz unten ist.Für Android Studio und IntelliJ:
Zuerst verpflichten alles und Konflikte zu lösen.
Öffnen Sie dann das Terminal von unten in der IDE und geben Sie Folgendes ein:
Jetzt können Sie schieben.
quelle
WARNUNG DIESES ÜBERSCHREIBT DAS REMOTE-REPOSITORY möglicherweise
Das hat bei mir funktioniert:
quelle
Da alle anderen Antworten die Frage nicht beantworten, finden Sie hier eine Lösung, die von dieser Antwort inspiriert ist auf eine verwandte Frage .
So bekommen Sie Ihren Fehler zu tun
git rebase
:Dieser Fehler bricht die Rebase nicht ab, aber Sie befinden sich jetzt in der Mitte:
Sie können die Zusammenführung jetzt von Hand durchführen. Finden Sie die übergeordneten Commits des ursprünglichen Merge-Commits heraus:
Finden Sie heraus, welches der beiden Eltern zum Zusammenführen mit dem aktuellen zusammengeführt wurde (wahrscheinlich das zweite, überprüfen Sie mit
git log 222222222
), und führen Sie die Zusammenführung von Hand durch, indem Sie die Festschreibungsnachricht des ursprünglichen Zusammenführungs-Festschreibens kopieren:quelle
Ich hatte das gleiche Problem. Das Problem ist, dass Remote dies verhindert hat.
Ich habe zuerst ein lokales Repository erstellt. Ich habe ein
LICENSE
und hinzugefügtREADME.md
-Datei zu meiner lokalen und festgeschriebenen Datei .Dann wollte ich ein Remote-Repository, also habe ich eines auf GitHub erstellt. Hier habe ich einen Fehler gemacht, als ich "Dieses Repository mit einer README-Datei initialisieren" aktiviert habe. aktiviert habe, wodurch auch in remote eine README.md erstellt wurde.
Also jetzt, als ich rannte
Ich habe:
Um dies zu überwinden, habe ich es getan
Was zu dem folgenden Fehler führte:
Ich habe es versucht:
Ergebnis:
Lösung:
Ich habe das Remote-Repository entfernt und ein neues erstellt (ich glaube, nur das Entfernen von Dateien
README
hätte funktionieren können). Danach hat Folgendes funktioniert:quelle
git push --force ...
wäre in diesem speziellen Fall eine richtige Lösung für Schritt 1Dies geschieht normalerweise, wenn Sie das Remote-Repository zum ersten Mal festschreiben. Da der Fehler eindeutig besagt, dass "das Zusammenführen nicht verwandter Historien verweigert wird", müssen wir das Flag --allow-non-related-histories verwenden.
Jetzt würde es einige Konflikte geben, die wir manuell lösen müssen. Danach schreiben Sie einfach den Code fest und drücken ihn.
quelle
--allow-unrelated-histories
Flagge.Zwei Möglichkeiten, wenn dies passieren kann -
Sie haben ein Projekt geklont und irgendwie wurde das .git-Verzeichnis gelöscht oder beschädigt. Dies führt dazu, dass Git Ihre lokale Historie nicht kennt und daher diesen Fehler auslöst, wenn Sie versuchen, in das Remote-Repository zu pushen oder daraus zu ziehen.
Sie haben ein neues Repository erstellt, einige Commits hinzugefügt und versuchen nun, aus einem Remote-Repository zu ziehen, das bereits einige eigene Commits enthält. Git wird in diesem Fall auch den Fehler auslösen, da es keine Ahnung hat, wie die beiden Projekte zusammenhängen.
LÖSUNG
Git Pull Origin Master - Allow-Un-Related-Histories
Ref - https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
quelle
Ich hatte auch damit zu kämpfen, aber es gelang mir, eine Problemumgehung zu finden.
Wenn Sie auf den obigen Fehler stoßen, wählen Sie einfach das Merge-Commit aus und setzen Sie die Rebase fort:
quelle
Ziehen Sie zunächst die Remote-Änderungen mit dem folgenden Befehl auf Ihr lokales Verzeichnis:
** Filialname ist in meinem Fall Master.
Wenn der Pull-Befehl ausgeführt wird, tritt ein Konflikt auf. Sie sollten die Konflikte lösen. Ich benutze Android Studio, um Konflikte zu lösen.
Wenn Konflikte gelöst sind, erfolgt die Zusammenführung!
Jetzt können Sie sicher schieben.
quelle
Resolve Conflict
in AS gesucht . Manchmal verschwindet das Popup / der Ballon unten rechts und ich kann nichts tun. Danke @oiyioIch habe gerade eine gemacht
quelle
Beim a
git pull
erhielt ich diese Nachrichtfatal: refusing to merge unrelated histories
für ein Repo-Modul, bei dem ich die lokale Kopie eine Weile nicht aktualisiert hatte.Ich habe diesen Befehl nur ausgeführt, um den lokalen Ursprung zu aktualisieren. Ich wollte nur das Neueste von der Fernbedienung und brauchte keine lokalen Änderungen.
Dies hat es in meinem Fall behoben.
quelle
Ich benutze die Rebase seit Jahren und war noch nie auf ein solches Problem gestoßen. Ihr erstes Problem ist jedoch, dass Sie versuchen, dies direkt auf dem Remote-Zweig
development
des Remote-Repositorys zu tunorigin
. Das ist buchstäblich falsch, weil Rebase ein gefährlicher Befehl ist, der die Git-Geschichte umstrukturiert. Allerdings sollten Sie zuerst Ihr lokales Repository anprobieren und es nur pushen, wenn es für Sie wie erwartet funktioniert.Mein üblicher Rebase-Workflow sieht also folgendermaßen aus (bitte beachten Sie jedoch, dass Sie Rebase nicht für Zweige verwenden sollten, die nicht das einzige Komitee sind. Verwenden Sie für solche Zweige ggf. einfach Zusammenführen und Lösen von Konflikten):
master
als einzeiliger Befehl):git checkout master && git pull origin master && git checkout development
git rebase master
git push -f origin development
Wie ich bereits erwähnt habe, denken Sie daran, dass Rebase die Git-Geschichte manipuliert, was normalerweise eine schlechte Sache ist. Dies ist jedoch in Filialen möglich, zu denen sich sonst niemand verpflichtet. Verwenden Sie eine andere Zusammenführungsstrategie wie Zusammenführen selbst, Squash oder Cherrypick, um den Zweig für die anderen Entwickler abziehbar zu halten. Mit anderen Worten: Rebase sollte nicht Ihr Werkzeug für die verteilte Entwicklung sein. Es funktioniert gut für Sie, wenn Sie der einzige sind, der an diesem Repository arbeitet.
Wir verwenden die Feature-Branch-Strategie. In diesem Fall verwende ich normalerweise rebase, um die "Updates" von den anderen Entwicklern zu erhalten, die in der Zwischenzeit im Master-Zweig aufgetreten sind. Auf diese Weise wird die Größe der Commits reduziert, die in einer Pull-Anforderung sichtbar sind. Daher erleichtert es dem Code-Prüfer, meine in diesem Feature-Zweig vorgenommenen Änderungen zu sehen.
quelle
Lesen Sie mit dem folgenden Link, es funktioniert für mich (ohne die
--allow-unrelated-histories
Flagge zu benutzen )https://stackoverflow.com/a/39783462/4324288
quelle