Git ściąga gałąź z innego repozytorium?

86

Mam lokalne repozytorium git, które jest klonem repozytorium na github. Ktoś rozwidlił repozytorium i dokonał zmian w nowej gałęzi w nowym repozytorium. Chcę przenieść tę nową gałąź do mojego repozytorium (lokalnie, aby najpierw pracować nad nią przed połączeniem z wzorcem).

Próbowałem utworzyć nową gałąź, a następnie wyciągnąć z rozwidlonego repozytorium, ale narzeka, ponieważ nowa gałąź jest kopią gałęzi głównej, a także zmienia się plik lokalny, więc mówi

error: Your local changes to the following files would be overwritten by merge.

Jak więc mogę przeciągnąć gałąź z innego repozytorium do nowej gałęzi w moim lokalnym repozytorium?

Mam nadzieję, że to ma sens. Jeśli nie, to jest moje repozytorium: https://github.com/MatthewLM/cbitcoin

Jak widać, ktoś utworzył nowe repozytorium z gałęzią „linuxBuild”: https://github.com/austonst/cbitcoin/tree/linuxBuild

Chcę, aby ta gałąź znajdowała się w moim lokalnym repozytorium dla MatthewLM / cbitcoin.

Jak mogę to zrobić?

Matthew Mitchell
źródło

Odpowiedzi:

156

Musisz upewnić się, że git statuspokazuje, że w lokalnym repozytorium nie istnieją żadne zmiany niestacjonarne.
Możesz to zrobić, najpierw przechowując lokalne zmiany, a następnie wyciągając tę ​​gałąź. Następnie możesz wykorzystać swoją skrytkę.


Jeśli chcesz odtworzyć strukturę gałęzi rozwidlenia w swoim lokalnym repozytorium, możesz wykonać następujące czynności:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Spowoduje to utworzenie lokalnego oddziału fork_branchz taką samą historią jak <branch>w forku, tj. fork_branchRozgałęzia się od twojego mastermiejsca <branch>w fork. Dodatkowo, twój lokalny oddział będzie teraz śledził tę gałąź w fork, dzięki czemu możesz łatwo wprowadzać nowe zmiany wprowadzone w fork.

Myślę, że nadal musisz się wcześniej upewnić, że twoja kopia robocza nie zawiera żadnych zmian.

Daniel Hilgarth
źródło
Ok dzięki. Byłoby świetnie, gdybym chciał moich lokalnych zmian i zatwierdzeń, których nie ma w gałęzi z fork. Ale co, jeśli chcę, aby nowa gałąź była dokładnie taka, jak w repozytorium forka? Obejmuje to usunięcie wszelkich zatwierdzeń z mojego własnego repozytorium po rozwidleniu tej nowej gałęzi. W ten sposób wyglądałoby to tak, jakby gałąź została utworzona na moim własnym repozytorium, a nie na rozwidlonym.
Matthew Mitchell
Twoja odpowiedź jest akceptowalnym rozwiązaniem tego, co muszę zrobić, ale byłoby to prostsze, gdybym mógł przeciągnąć nową gałąź do repozytorium. Poczekam chwilę, aby zobaczyć, co powiedzą inni.
Matthew Mitchell,
@MatthewMitchell: Sprawdź aktualizację. Czy tego szukałeś?
Daniel Hilgarth
Cóż, w końcu użyłem metody scalania go z inną gałęzią (właśnie połączyłem ją z masterem), ale w przypadku, gdy chcę tylko gałąź dokładnie taką, jaka jest z innego repozytorium, spróbuję pobrać i metoda kasy, którą opisałeś. Dzięki.
Matthew Mitchell,
Używane do migracji innej gałęzi "gh-pages" z innego repozytorium!
Marcello de Sales
38

Metoda bez dodawania pilota.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>
Alex78191
źródło
2
Dziękuję za to, mam to dodane do zakładek i wracam do tego!
Shane Smiskol
2
Najlepsza odpowiedź na rok 2020
Diament