Próbuję przejrzeć żądanie ściągnięcia w GitHub do oddziału, który nie jest nadrzędny. Gałąź docelowa znajdowała się za masterem, a żądanie ściągnięcia pokazywało zatwierdzenia z mastera, więc połączyłem mastera i wysłałem go do GitHub, ale zatwierdzenia i różnice dla nich nadal pojawiają się w żądaniu ściągnięcia po odświeżeniu. Podwójnie sprawdziłem, czy gałąź na GitHubie ma zatwierdzenia z mastera. Dlaczego nadal pojawiają się w żądaniu ściągnięcia?
Sprawdziłem również lokalnie żądanie ściągnięcia i pokazuje tylko niezintegrowane zatwierdzenia.
Odpowiedzi:
Wygląda na to, że pull request nie śledzi zmian w gałęzi docelowej (skontaktowałem się z pomocą techniczną GitHub i otrzymałem odpowiedź 18 listopada 2014 r., W której stwierdzono, że jest to zgodne z projektem).
Możesz jednak sprawić, by pokazywał zaktualizowane zmiany, wykonując następujące czynności:
Wymienić
githuburl
,org
,repo
,targetbranch
, icurrentbranch
w razie potrzeby.Lub, jak wskazał hexsprite w swojej odpowiedzi, możesz również zmusić go do aktualizacji, klikając EditPR i tymczasowo zmieniając bazę na inną gałąź iz powrotem. Powoduje to ostrzeżenie:
I pozostawi dwa wpisy dziennika w PR:
źródło
Oto dobre obejście. Użyj
Edit
przycisku podczas przeglądania PR w GitHub, aby zmienić gałąź podstawową na coś innego niżmaster
. Następnie przełącz go z powrotem na,master
a teraz poprawnie pokaże tylko zmiany z ostatnich zatwierdzeń.źródło
Podsumowując, GitHub nie ponownie bazuje historii zatwierdzeń automatycznie w żądaniach ściągnięcia. Najprostsze rozwiązania to:
Rozwiązanie 1: Rebase
Załóżmy, że chcesz połączyć się
master
zfeature-01
:Jeśli pracujesz na widelcu, może być konieczne zastąpienie go
origin
powyżejupstream
. Zobacz, jak zaktualizować repozytorium rozwidlone GitHub? aby dowiedzieć się więcej o śledzeniu zdalnych gałęzi oryginalnego repozytorium.Rozwiązanie 2: Utwórz nowe żądanie ściągnięcia
Załóżmy, że chcesz scalić wprowadzenie
master
zfeature-01
:Teraz otwórz żądanie ściągnięcia dla
feature-01-rebased
i zamknij to dlafeature-01
.źródło
Musisz dodać do swojego
~/.gitconfig
pliku:To automatycznie osiągnie to samo, co pokazuje ta odpowiedź .
Mam to stąd .
źródło
Dla każdego, kto napotka ten problem i jest zdezorientowany przez zachowanie GitHub Pull Request, główną przyczyną jest to, że PR jest różnicą końcówki gałęzi źródłowej względem wspólnego przodka gałęzi źródłowej i gałęzi docelowej. W związku z tym pokaże wszystkie zmiany w gałęzi źródłowej aż do wspólnego przodka i nie uwzględni żadnych zmian, które mogły wystąpić w gałęzi docelowej.
Więcej informacji można znaleźć tutaj: https://developer.atlassian.com/blog/2015/01/a-better-pull-request/
Różnice oparte na wspólnych przodkach wydają się niebezpieczne. Chciałbym, żeby GitHub miał opcję tworzenia bardziej standardowego PR opartego na 3-kierunkowym scalaniu.
źródło
Jednym ze sposobów rozwiązania tego problemu jest
git rebase targetbranch
ten PR. Następniegit push --force targetbranch
Github pokaże odpowiednie zatwierdzenia i różnice. Uważaj na to, jeśli nie wiesz, co robisz. Może najpierwgit diff targetbranch
sprawdź gałąź testową, aby wykonać rebase, a następnie upewnić się, że nadal jest to, czego chcesz.źródło
Dzieje się tak z GitHubem, gdy squash commity scalone z gałęzi docelowej.
Używałem squasha i merge z Githubem jako domyślną strategią scalania, w tym scalania z gałęzi docelowej. Wprowadza to nowe zatwierdzenie, a GitHub nie rozpoznaje, że to zgniecione zatwierdzenie jest takie samo jak te, które są już w master (ale z różnymi hashami). Git obsługuje to poprawnie, ale wszystkie zmiany widzisz ponownie w GitHub, co utrudnia przeglądanie. Rozwiązaniem jest regularne scalanie tych wprowadzonych wcześniej zatwierdzeń zamiast operacji squash i merge. Gdy chcesz scalić inną gałąź ze swoją jako zależność
git merge --squash
i cofnąć to pojedyncze zatwierdzenie przed ściągnięciem z mastera, gdy ta inna gałąź faktycznie dotarła do mastera.EDYCJA: innym rozwiązaniem jest zmiana bazy i wymuszenie wypychania. Czysta, ale przepisana historia
źródło
Nie jestem do końca pewien co do teorii, która za tym stoi. Ale otrzymałem to kilka razy i mogłem to naprawić, wykonując następujące czynności.
Spowoduje to pobranie i scalenie zmian z oryginalnej gałęzi głównej repozytorium (jeśli masz na to uwagę)
Następnie wymuszasz wypychanie zmian do sklonowanego repozytorium na github (cel)
Dzięki temu twój klon github i repozytorium rodzica są na tym samym poziomie zatwierdzania github i nie zobaczysz żadnych niepotrzebnych zmian w gałęziach.
źródło
Wypróbuj kolejno poniższe polecenia.
źródło
Bezpieczne podejście, jeśli zbytnio martwisz się o zepsucie: przejdź do pliku i ręcznie usuń zmiany, a następnie zmiażdż z ostatnim zatwierdzeniem za pomocą
Nie ma konfliktów, możesz iść!
źródło