Jak mogę ponownie zsynchronizować widelec z oryginału


33

Właśnie rozwidliłem projekt w Github. Dokonałem modyfikacji i wysłałem żądanie ściągnięcia. Właściciel połączył mój widelec z głównym projektem, a następnie dokonał pewnych modyfikacji. Na razie mój widelec nie jest aktualizowany w głównym projekcie. Brakuje mi modyfikacji, które wprowadził po scaleniu mojego żądania ściągnięcia. Jak mogę zaktualizować swój widelec w projekcie głównym? Czy jest na to sposób w interfejsie internetowym?

Dzięki


Piszę prostą instrukcję. sprawdź tutaj: webapps.stackexchange.com/a/58140/63016
— Youngjae

2
Jest teraz oficjalny dokument, który jest dobrze zrobiony: help.github.com/articles/syncing-a-fork
— Andre Miras

Odpowiedzi:


36

Z założenia rozwidlenie projektu tworzy osobne repozytorium, które nie jest aktualizowane po zmianie oryginalnego repozytorium. Jednak gitsprawia, że bardzo łatwo aktualizować ręcznie.

Potrzebujesz pomocy z trzeciego repozytorium (wystarczy kopia lokalna). Istnieją 3 repo:

  • „Upstream”: repozytorium projektu upstream na Github.
  • „Pochodzenie”: repozytorium Twojego widelca na Github
  • „Lokalne”: Twoje lokalne repozytorium na twoim komputerze. Zakładam, że stworzyłeś go poprzez klonowanie Fork git clone git@github.com:your-username/projectname.giti że wszyscy używają gałęzi master.

Zakładając, że obecnie „Origin” i „Local” są w tym samym stanie, a „Upstream” wyprzedza o 1 lub więcej zatwierdzeń (scalenie i wszelkie późniejsze zmiany).

Najpierw dodaj projekt nadrzędny jako zdalny program Git :

git remote add upstream https://github.com/upstream-username/projectname.git

Następnie pobierz (co oznacza pobierz, a następnie scal automatycznie) zmiany z mastergałęzi pilota do gałęzi current ( master) lokalnego repozytorium :

git pull upstream master

Teraz Twoje lokalne repozytorium jest zsynchronizowane z upstream. Wreszcie, wypchnij lokalne repozytorium do swojego widelca Github:

git push origin master

Teraz wszystko jest zsynchronizowane.


2

1
Jest to rzeczywiście możliwe w interfejsie internetowym: webapps.stackexchange.com/a/31010/10390
— thSoft 30.01.2013

Yeehaw! Odrywałem włosy, próbując znaleźć te wyraźne informacje. Dzięki za udostępnienie!
— pepoluan

... ale spójrz również na komentarze odpowiedzi, udowadniając, że Resync przez Internet nie jest najlepszą opcją, ponieważ zanieczyszcza repozytorium
— usr-local-ΕΨΗΕΛΩΝ

co robisz, gdy po ściągnięciu jest napisane „już aktualne”, ale oczywiście tak nie jest? (istnieją pliki, które zmieniłem wszystko w jednym podkatalogu i nie powinienem mieć żadnych różnic w żadnym innym pliku, ale tak robię)
— roberto tomás

1

Musisz dodać pilota (zobacz pomoc GitHub ) i pobrać z tego nowego pilota.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

Znalazłem tę odpowiedź jako uzupełnienie oryginalnej odpowiedzi, ponieważ dotyczy ona tylko synchronizacji jednej gałęzi (master). Ponadto, jeśli gałąź została utworzona w górę od czasu rozwidlenia, tworzenie jej na rozwidleniu jest nieco bardziej zaangażowane.

Krótka odpowiedź brzmi: aby zaktualizować widelec przy każdym odgałęzieniu w repozytorium nadrzędnym, wykonaj to polecenie.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Nie robi to usuwania gałęzi z widelca, które zostały usunięte z górnego biegu. Nie ma sposobu, aby to zautomatyzować, szczególnie jeśli utworzyłeś gałęzie na swoim widelcu.

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.