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ć?

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.


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>

2
Dziękuję za to, mam to dodane do zakładek i wracam do tego!
— Shane Smiskol

2
Najlepsza odpowiedź na rok 2020
— Diament
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.