Podczas git rebase origin/development
następującego komunikatu o błędzie jest wyświetlany z Git:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Moja wersja Git to 2.9.0. W poprzedniej wersji działało dobrze.
Jak mogę kontynuować ten rebase, umożliwiając niepowiązane historie z wymuszoną flagą wprowadzoną w nowej wersji?
git-rebase
sytuacji, a odpowiedź daje flagęgit-merge
git pull [repo URL]
zamiastgit clone [repo URL]
Odpowiedzi:
Domyślne zachowanie zmieniło się od Gita 2.9:
Aby uzyskać więcej informacji, zobacz dziennik zmian wydania Git .
Możesz użyć,
--allow-unrelated-histories
aby wymusić scalenie.źródło
--allow-unrelated-histories
stałe?git pull
również. Był w tym „rzadkim wydarzeniu, które łączy historie dwóch projektów, które rozpoczęły swoje życie niezależnie”.git --work-tree="." pull --allow-unrelated-histories
W moim przypadku błąd występował tylko
fatal: refusing to merge unrelated histories
przy każdej próbie, zwłaszcza przy pierwszym żądaniu ściągnięcia po zdalnym dodaniu repozytorium Git.Użycie
--allow-unrelated-histories
flagi działało w następujący sposób:źródło
git clone
.Spróbuj wykonać następujące polecenie:
To powinno rozwiązać twój problem.
źródło
Wystąpił ten błąd, gdy najpierw skonfigurowałem lokalne repozytorium. Potem poszedłem do GitHub i utworzyłem nowe repozytorium. Potem pobiegłem
Kiedy próbowałem pchać lub ciągnąć, za
fatal: unrelated_histories
każdym razem otrzymywałem ten sam błąd.Oto jak to naprawiłem:
źródło
.git
folder, uruchomiłgit init
i zrobił to, co powiedziała Adithya, z wyjątkiem części scalającej.W tym celu wprowadź polecenie:
Na przykład,
Odniesienie:
Problem niezwiązanych historii GitHub
źródło
Nastąpi przekierowanie do okna edycji Vima:
git push --set-upstream origin <branch>
źródło
:x<Enter>
będzieMiałem ten sam problem. Spróbuj tego:
źródło
Próbować
git pull --rebase development
źródło
git pull --rebase=preserve --allow-unrelated-histories development
newOrigin branch
zamiast zamiastdevelopment
) dodało początkowe zatwierdzenie na szczycie mojego lokalnego oddziału, skutecznie usuwając z niego prawie wszystko. Chciałem, aby początkowe zatwierdzenie z nowego pilota było na dole.Dla Androida Studio i IntelliJ:
Najpierw popełnij wszystko i rozwiąż wszelkie konflikty.
Następnie otwórz terminal od dołu IDE i wprowadź:
Teraz możesz pchać.
źródło
OSTRZEŻENIE POTENCJALNIE NALEŻY PONOWNIE NAPRAWIĆ ZDALNE REPOZYTORIUM
To działało dla mnie:
źródło
Ponieważ wszystkie pozostałe odpowiedzi w rzeczywistości nie odpowiadają na pytanie, oto rozwiązanie inspirowane tą odpowiedzią na powiązane pytanie.
Błąd pojawia się wtedy, gdy
git rebase
:Ten błąd nie anuluje rebase, ale jesteś teraz w jego trakcie:
Możesz teraz wykonać scalenie ręcznie. Dowiedz się, jakie są zatwierdzenia pierwotnego zatwierdzenia scalania:
Sprawdź, który z dwóch rodziców scalających jest tym, który został scalony z bieżącym (prawdopodobnie drugim, sprawdź za pomocą
git log 222222222
), a następnie wykonaj scalenie ręcznie, kopiując komunikat zatwierdzenia oryginalnego zatwierdzenia scalania:źródło
Miałem ten sam problem. Problem jest zdalny miał coś, co temu zapobiega.
Najpierw utworzyłem lokalne repozytorium. Dodałem plik
LICENSE
iREADME.md
do mojego pliku lokalnego i zatwierdziłem.Potem chciałem zdalnego repozytorium, więc utworzyłem je na GitHub. Tutaj popełniłem błąd, sprawdzając „Zainicjuj to repozytorium za pomocą README” , co również zdalnie utworzyło README.md.
Więc teraz, kiedy uciekłem
Mam:
Teraz to zrobiłem
Co spowodowało następujący błąd:
Próbowałem:
Wynik:
Rozwiązanie:
Usunąłem zdalne repozytorium i utworzyłem nowy (myślę, że tylko usunięcie pliku
README
mogło zadziałać), a potem działały następujące czynności:źródło
git push --force ...
byłoby właściwym rozwiązaniem w kroku 1 w tym konkretnym przypadkuZwykle dzieje się tak, gdy pierwszy raz przypisujesz się do zdalnego repozytorium. Ponieważ błąd wyraźnie mówi „odmowa połączenia niepowiązanych historii”, musimy użyć flagi --allow-niezwiązane historie.
Teraz będą pewne konflikty, które musimy rozwiązać ręcznie. Następnie wystarczy zatwierdzić kod i wcisnąć go.
źródło
--allow-unrelated-histories
flagi.Dwie możliwości, kiedy może się to zdarzyć -
Sklonowałeś projekt i jakoś katalog .git został usunięty lub uszkodzony. To powoduje, że Git nie zdaje sobie sprawy z twojej lokalnej historii i dlatego powoduje zgłoszenie tego błędu podczas próby wypychania lub wyciągania ze zdalnego repozytorium.
Utworzyłeś nowe repozytorium, dodałeś do niego kilka zatwierdzeń, a teraz próbujesz wyciągnąć ze zdalnego repozytorium, które już ma własne zatwierdzenia. W tym przypadku Git zgłosi błąd, ponieważ nie ma pojęcia, jak te dwa projekty są ze sobą powiązane.
ROZWIĄZANIE
git pull master master --allow-nonrelated-histories
Ref - https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
źródło
Walczyłem również z tym, ale udało mi się znaleźć obejście.
Gdy napotkasz powyższy błąd, po prostu wybierz Cherry zatwierdzenia scalania, a następnie kontynuuj rebase:
źródło
Najpierw pociągnij zmiany lokalne do lokalnego za pomocą następującego polecenia:
** nazwa gałęzi jest w moim przypadku master.
Po wykonaniu polecenia pull występuje konflikt. Powinieneś rozwiązać konflikty. Używam Android Studio do rozwiązywania konfliktów.
Po rozwiązaniu konfliktów scalanie jest zakończone!
Teraz możesz bezpiecznie pchać.
źródło
Resolve Conflict
w AS. Czasami wyskakujące okienko / dymek z prawej strony znikają i nie jestem w stanie nic zrobić. Dzięki @oiyioWłaśnie zrobiłem
źródło
Kiedy robiłem a
git pull
, dostałem ten komunikatfatal: refusing to merge unrelated histories
do modułu repo, w którym przez jakiś czas nie aktualizowałem lokalnej kopii.Uruchomiłem to polecenie, aby odświeżyć lokalnie z miejsca pochodzenia. Chciałem tylko najnowsze zdalnie i nie potrzebowałem żadnych lokalnych zmian.
To naprawiło to w moim przypadku.
źródło
Korzystam z bazy od lat i nigdy nie spotkałem się z takim problemem. Pierwszym problemem jest jednak próba zrobienia tego bezpośrednio w zdalnej gałęzi
development
ze zdalnego repozytorium o nazwieorigin
. Jest to dosłownie złe, ponieważ rebase to niebezpieczne polecenie, które restrukturyzuje historię git. Powiedziawszy to, powinieneś najpierw wypróbować swoje lokalne repozytorium i wypchnąć je tylko, jeśli działa dla ciebie zgodnie z oczekiwaniami.Tak więc mój zwykły proces rebase wygląda następująco (pamiętaj jednak, że nie powinieneś używać rebase dla oddziałów, których nie jesteś jedyną komisją. W przypadku takich oddziałów po prostu łącz i rozwiąż konflikty, jeśli dotyczy):
master
; jako polecenie jednowierszowe):git checkout master && git pull origin master && git checkout development
git rebase master
git push -f origin development
Jak już wspomniałem, pamiętaj, że rebase manipuluje historią gitów, co zwykle jest złe. Można to jednak zrobić na oddziałach, do których nikt inny się nie zobowiązuje. Aby utrzymać ciągłość gałęzi dla innych programistów, użyj innej strategii scalania, takiej jak scalanie, squash lub cherrypick. Innymi słowy: Rebase nie powinno być narzędziem rozproszonego programowania. Działa dobrze, jeśli jesteś jedynym, który działa w tym repozytorium.
Używamy strategii gałęzi funkcji. W tym celu zwykle używam rebase, aby uzyskać „aktualizacje” od innych programistów, które w międzyczasie wydarzyły się w gałęzi master. Dzięki temu zmniejsza rozmiar zatwierdzeń widocznych w żądaniu ściągnięcia. Dlatego recenzentowi kodu łatwiej jest zobaczyć moje zmiany dokonane w tej gałęzi funkcji.
źródło
Przeczytaj poniższy link, Działa dla mnie (bez użycia
--allow-unrelated-histories
flagi)https://stackoverflow.com/a/39783462/4324288
źródło