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.