Scalanie między widelcami w GitHub

259

Rozwidliłem repozytorium GitHub. Następnie wrzuciłem kilka zmian do mojego widelca. Następnie oryginalne repozytorium połączyło moje zmiany i kilka innych. Teraz chcę scalić zmiany, których mi brakuje. Próbowałem prostego ściągnięcia, a następnie wypchnięcia, ale dzięki temu moje zatwierdzenia zostały zduplikowane. Jak najlepiej to zrobić?

R. Martinho Fernandes
źródło

Odpowiedzi:

352

Prawdopodobnie masz „zdalny” dla każdego repozytorium. Musisz wyciągnąć z jednego pilota i pchnąć na drugi.

Jeśli pierwotnie sklonowałeś ze swojego widelca, ten pilot nazywa się „origin”. Jeśli jeszcze go nie dodałeś, musisz dodać repozytorium pierwszej osoby jako innego pilota:

git remote add firstrepo git://github.com/first/repo.git

Po tym wszystkim wszystko powinno być w stanie

git pull firstrepo master
git push origin

Pamiętaj, że git pullnie jest niczym więcej niż makro, dokłada git fetchi git merge, w tej kolejności. Wystarczy pobrać listę zatwierdzeń z repozytorium pierwszej osoby, a następnie scalić jej gałąź z drzewem. Scalanie powinno zrobić dobrze z twoimi zobowiązaniami w obu gałęziach.

GitHub, w całej swojej wiecznej niesamowitości, daje oczywiście skrót. Na rozwidleniu repozytorium znajduje się przycisk „przewiń do przodu”, którego możesz użyć, aby złapać rozwidlenie, jeśli całkowicie połączysz się z drugą stroną.

Jim Puls
źródło
1
Czy istnieje sposób, aby to zrobić całkowicie za pomocą operacji zdalnych? Jeśli dobrze rozumiem, za pomocą tej metody pobierzesz wszystkie zmiany do lokalnego repozytorium, a następnie prześlesz (wypchniesz) wszystkie z powrotem do rozwidlenia na github. Wolę po prostu wyciągnąć wszystkie zmiany bezpośrednio do widelca na github.
Ken Liu,
1
Nie. Git tego nie obsługuje. Jednak na szczęście Github ma teraz przycisk scalania w interfejsie internetowym.
cweiske
13
@cweiske - gdzie jest ten przycisk Scal? Przeglądałem wszystkie strony administracyjne i strony główne, ale nie mogę ich znaleźć :(.
Adam,
2
@Adam, jest na stronie Pull Request. Więc forker otworzy żądanie ściągnięcia, aby połączyć jeden ze swoich oddziałów z jednym z twoich. Tam możesz kliknąć przycisk scalania.
Rob Barreca,
2
Przycisk Przewijanie do przodu nie jest już dostępny. Aby uzyskać informacje, użyłem innego adresu URL git w ramach mojego polecenia:git remote add snaury [email protected]:snaury/script-runner
olibre
72

Tak więc powyższa odpowiedź nie działała dla mnie idealnie. Mianowicie, wydawało się, że traciło link do oryginalnego autora github, gdy działało, a potem nie działało. Myślę, że problem polegał na tym, że odpowiedź pominęła / pomiędzy nazwą zdalną a gałęzią. Pobrałby więc gałąź o nazwie master ze zdalnego, ale nie byłby w stanie nic z tym zrobić. Nie bardzo wiem dlaczego.

Oto sposób, w jaki github poleca z ich strony .

Po sklonowaniu rozwidlonego repozytorium musisz dodać zdalne wskazanie do oryginału, tak jak w poprzedniej odpowiedzi. Lubią to nazywać, ale to nie ma znaczenia.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Potem przynosisz

git fetch upstream

i zobaczysz wersje dostępne do scalenia

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Następnie wystarczy wybrać gałąź, w której chcesz się połączyć. Pamiętaj, że nie są to oddziały lokalne, są one przechowywane pod pilotami. Ale pod warunkiem, że nie masz lokalnego oddziału o nazwie upstream / master (co jest dozwolone), powinieneś dobrze scalić się z linią poniżej:

git merge upstream/master

Alternatywnie możesz skrócić pobieranie / scalanie (przynajmniej po wstępnym pobieraniu) za pomocą tego wiersza:

git pull upstream/master
Bob Spryn
źródło
Problem polega na tym, że jeśli masz już zmiany, zmiany, które wprowadzisz, utworzą zatwierdzenie scalania. Przydatne w niektórych przypadkach, ale w większości przypadków trochę bezcelowe.
Pablo Olmos de Aguilera C.
1
W takim przypadku użycie git rebasedziałałoby znacznie lepiej, pomijając te brzydkie puste zatwierdzenia scalania
Fruch,