Współtworzenie projektu na githubie, jak „przełożyć moje żądanie pull na master”

98

Ok, więc współtworzę projekt na githubie. Projekt na githubie to upstreammoje rozwidlone repozytorium na githubie origin, a moje localrepozytorium na moim komputerze.

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

następnie przesyłam żądanie ściągnięcia

git push origin master

Żądanie ściągnięcia jest sprawdzane i należy wprowadzić niepowiązaną zmianę. Ktoś inny zobowiązuje się i łączy wupstream/master

Teraz upstreamopiekun prosi mnie, abym „przełożył moje żądanie ściągnięcia na master”

To moja historia (wstaw efekt dźwiękowy Prawa i porządku) .....

Nie wprowadziłem żadnych zmian w żądaniu ściągnięcia i nadal jest to ta sama funkcja zatwierdzania w gałęzi.

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

Nie rozumiem. Jak to możliwe, skoro wiem, że ktoś zaangażował się i połączył upstream/masterpo wysłaniu żądania ściągnięcia origin/feature?

Czy ktoś może mi powiedzieć, jaka powinna być prawidłowa procedura w tej sytuacji?

fontno
źródło

Odpowiedzi:

110

Pokazujesz tylko pobieranie w repozytorium upstream. To właściwie nie aktualizuje żadnego z twoich lokalnych oddziałów. To aktualizuje tylko swoją wiedzęupstream . Musiałbyś upewnić się, że upstream/masterjest w pełni scalony z twoim master, jak z a git pull, przed ponownym bazowaniem na master, lub po prostu po prostu ponownym bazowaniem na upstream/master.

To znaczy:

git checkout master
git pull upstream master
git checkout feature
git rebase master

lub

git checkout feature
git rebase upstream/master

Aktualizacja:

Po naprawieniu lokalnego featureoddziału musisz go przesunąć z powrotem do, originaby zakończyć aktualizację żądania ściągnięcia. Ponieważ już featureraz nacisnąłeś , nie możesz po prostu pushponownie, ponieważ rebase zmienia historię i nie jest to długie przewijanie do przodu. Normalnie, jeśli pchnięcie kończy się niepowodzeniem z „nie szybkim przewijaniem do przodu”, rozwiązujesz to, wykonując ciągnięcie, ale pociągnięcie po prostu połączy dwie rozbieżne historie, co zdecydowanie nie jest tym, czego chcesz. Oznaczałoby to, że Twoja stara featuregałąź (sprzed rebase) zostanie połączona z nową (po rebase). Chcesz nadpisać origin/feature stanem nowej featuregałęzi, zrzucając wszelkie zapisy starej gałęzi. Oznacza to, że będziesz chciał wymusić wypchnięcie, nawet jeśli nie jest to szybkie przewijanie do przodu, używając git push -f origin feature. Uwaga:niebezpieczne i możesz z nim stracić commits. Używaj go tylko wtedy, gdy jesteś absolutnie pewien, że wiesz, co robisz, na przykład tutaj, gdzie celowo chcesz porzucić stare, bezużyteczne zatwierdzenia w featuregałęzi przed rebase .

Ryan Stewart
źródło
1
Ok, dzięki za wyjaśnienie. Widzę, że powinienem był ciągnąć zamiast ściągać. Teraz mam inny problem, kiedy git push origin featurepojawia się błąd, który nie pozwala na szybkie przewijanie do przodu, nie udało mi się push itp. Czy git pull --rebase rozwiązałby ten błąd i wypchnąłby do mojej gałęzi funkcji, czy też spowodowałoby to problemy dla opiekuna i innych?
fontno
1
Zaktualizowałem moją odpowiedź, aby ukryć nacisk.
Ryan Stewart
W moim przypadku dodałem repozytorium upstream jako zdalne, ale zapomniałem pobrać z niego. git fetch upstreampobrałem najnowsze zmiany, po czym w końcu git rebase upstream/developzadziałało.
Alberto Chiusole
10

Teraz jestem proszony przez zewnętrznego opiekuna, aby „przełożyć moje żądanie ściągnięcia na master”

Zwróć uwagę, że od września 2016 r. Opiekun może sam wywołać rebase.

Zobacz „ Rebase i scalanie żądań ściągnięcia

Po wybraniu nowej opcji „Przebuduj i scal”, zatwierdzenia z gałęzi żądania ściągnięcia są ponownie bazowane na końcu gałęzi podstawowej, a następnie sama gałąź podstawowa jest szybko przekazywana do tej nowo utworzonej głowy. Rebases automatycznie ustawia osobę zatwierdzającą zmiany oparte na zatwierdzeniach dla bieżącego użytkownika, zachowując informacje o autorstwie nienaruszone. Gałąź żądania ściągnięcia nie zostanie zmodyfikowana przez tę operację.

Jeśli z powodu konfliktów nie można przeprowadzić ponownego bazowania, poinformujemy Cię o tym, aby w razie potrzeby można było je rozwiązać ręcznie.

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

VonC
źródło