Uczę się gita i podążam za książką społeczności Git.
Wcześniej (dawno temu) utworzyłem publiczne repozytorium na Githubie z kilkoma plikami. Teraz skonfigurowałem lokalne repozytorium Git na moim obecnym komputerze i zatwierdziłem kilka plików. Następnie dodałem pilota wskazującego na moją stronę Github:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
To wydawało się skuteczne:
[root@osboxes c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Teraz chcę pobrać pliki z repozytorium Github na komputer. Ja to zrobiłem:
[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.
Jednak nie widzę żadnych nowych plików w moim katalogu lokalnym. Jak mogę je zdobyć?
Próbowałem też to zrobić:
[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
BTW, lokalnie jestem w oddziale głównym (nie ma innych oddziałów):
[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean
git init
? W tym drugim przypadku te repozytoria są niepowiązane (nie mają wspólnych zatwierdzeń) i nie można ich scalić (ściąganie to pobieranie + scalanie).Odpowiedzi:
Próbować
--allow-unrelated-histories
Jak skomentował max630, lub jak wyjaśniono tutaj, Git odmówił łączenia niepowiązanych historii
źródło
Więc rozwiąż konflikt
źródło
Chociaż jestem zwolennikiem odblokowywania problemów związanych z pracą ludzi, nie sądzę, aby „push --force” lub „--allow_unrelated_histories” były uczone nowych użytkowników jako ogólnych rozwiązań, ponieważ mogą spowodować prawdziwe spustoszenie w repozytorium, gdy ich używa się bez zrozumienia, dlaczego rzeczy nie działają w pierwszej kolejności.
Kiedy masz taką sytuację, w której zaczynasz od lokalnego repozytorium i chcesz stworzyć pilota na GitHub, z którym możesz dzielić się swoją pracą, jest na co uważać.
Podczas tworzenia nowego repozytorium online dostępna jest opcja „Zainicjuj to repozytorium za pomocą pliku README”. Jeśli przeczytasz drobny druk, jest na nim napis „Pomiń ten krok, jeśli importujesz istniejące repozytorium”.
Być może zaznaczyłeś to pole. Lub podobnie, wykonałeś add / commit online przed próbą pierwszego push. Dzieje się tak, gdy tworzysz unikalną historię zatwierdzeń w każdym miejscu i nie można ich pogodzić bez specjalnego dodatku wymienionego w odpowiedzi Nevermore (ponieważ git nie chce, abyś działał w ten sposób). Możesz skorzystać z niektórych porad wymienionych tutaj lub po prostu nie zaznaczać tej opcji następnym razem, gdy chcesz połączyć niektóre pliki lokalne z nowym pilotem; utrzymywanie pilota w czystości podczas tego początkowego naciśnięcia.
Odniesienie: moje pierwsze doświadczenie z git + hub polegało na tym, że napotkałem ten sam problem i dużo się nauczyłem, aby zrozumieć, co się stało i dlaczego.
źródło
Jeśli na jednym końcu nie ma znaczącej historii (aka jeśli jest to tylko jedno zatwierdzenie readme na końcu github), często łatwiej jest ręcznie skopiować plik readme do mojego lokalnego repozytorium i zrobić,
git push -f
aby moja wersja była nowym zatwierdzeniem roota .Uważam, że jest nieco mniej skomplikowany, nie wymaga zapamiętywania niejasnej flagi i sprawia, że historia jest nieco czystsza.
źródło
Na swojej gałęzi - mów mistrzu, wyciągaj i zezwalaj na niepowiązane historie
Pracował dla mnie.
źródło
Wykonaj następujące polecenie:
Otworzy się plik scalający vim. Dodaj wiadomość łączącą i:
I jesteś gotowy.
źródło
Kiedy użyłem
--allow-unrelated-histories
, to polecenie generowało zbyt wiele konfliktów. Wystąpiły konflikty w plikach, nad którymi nawet nie pracowałem. Aby obejść ten błąd" Refusing to merge unrelated histories"
, użyłem następującego polecenia rebase:Następnie zatwierdź niezatwierdzone zmiany za pomocą komunikatu o zatwierdzeniu. Na koniec uruchom następujące polecenie:
Po tym, moja kopia robocza była aktualna ze zdalną kopią i mogłem przesyłać swoje zmiany tak jak poprzednio. Nigdy więcej niepowiązanych błędów historii podczas ściągania.
źródło
git pull --rebase=merge --allow-unrelated-histories
jak--rebase=preserve
jest przestarzała git-scm.com/docs/git-pull#Documentation/…W moim przypadku napotkałem ten sam problem, zwłaszcza pierwsze żądanie ściągnięcia próbowane po zdalnym dodaniu repozytorium Git. Wystąpił następujący błąd.
Użyj polecenia --allow-unrelated-histories. Działa doskonale.
źródło