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ć?
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:
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ą.
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.
Po sklonowaniu rozwidlonego repozytorium musisz dodać zdalne wskazanie do oryginału, tak jak w poprzedniej odpowiedzi. Lubią to nazywać, ale to nie ma znaczenia.
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:
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
git remote add snaury [email protected]:snaury/script-runner
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.
Potem przynosisz
i zobaczysz wersje dostępne do scalenia
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:
Alternatywnie możesz skrócić pobieranie / scalanie (przynajmniej po wstępnym pobieraniu) za pomocą tego wiersza:
źródło
git rebase
działałoby znacznie lepiej, pomijając te brzydkie puste zatwierdzenia scalania