Rozwinąłem projekt na githubie i z powodzeniem wprowadzam zmiany w moim lokalnym mistrzu i staram się zacząć na githubie. Chcę wysłać żądanie ściągnięcia, ale chcę tylko dołączyć ostatnie zatwierdzenie. Interfejs żądania ściągania na github.com pokazuje 9 ostatnich zatwierdzeń i nie wiem, jak to przefiltrować.
Próbowałem zrozumieć, czy powinienem utworzyć nowy oddział lokalny, sprawdzić to i jakoś zresetować lub zmienić bazę na poprzednią? Następnie zastosować moje ostatnie zatwierdzenie od mojego wzorca przez id do nowej gałęzi lokalnej i użyć tego do żądania ściągnięcia?
Usiłuję uporządkować koncepcje i opracować odpowiednie wiersze poleceń, aby zrobić to, czego potrzebuję.
git
github
pull-request
Kevin Hakanson
źródło
źródło
Odpowiedzi:
Musisz w zasadzie utworzyć nowy oddział i wybrać wybory, które chcesz do niego dodać.
Następnie zobaczysz
<new-branch-name>
gałąź na github, przełączysz się na nią i możesz przesłać żądanie ściągnięcia z żądanymi zmianami.źródło
git remote add upstream <git repository>
igit remote update
przed uruchomieniem git checkout -b upstream upstream / master.Utwórz nowy oddział, zaczynając od najnowszego zatwierdzenia, które również znajduje się w repozytorium źródłowym:
Następnie użyj,
git cherry-pick
aby uzyskać pojedyncze zatwierdzenie, dla którego chcesz pobrać żądanie. Jeśli gałąź z tym zatwierdzeniem zostanie wywołana,feature
a żądane zatwierdzenie jest ostatnim zatwierdzeniem w tej gałęzi, będzie toZakładając, że ta łatka obowiązuje bez konfliktu, masz teraz gałąź, dla której możesz wykonać polecenie ściągnięcia.
W drugim kroku musisz teraz zdecydować, co zrobić ze swoim
feature
oddziałem. Jeśli nie opublikowałeś jeszcze swoich zmian w tej gałęzi, najlepszą procedurą jest prawdopodobnie ponowne wydanie tej gałęzi na nową gałąź (i usunięcie ostatniego zatwierdzenia, jeśli nie zostanie to zrobione automatyczniegit rebase
).źródło
feature
jest już popełnioneorigin/master
, nic się nie dzieje podczascherry-pick
. Nowa gałąź powinna pochodzićupstream/master
(tj. Odpowiedź Kevina Hakansona)Skończyło się na tym, że rozwidliłem widelec i chciałem złożyć prośbę o wycofanie do pierwotnego projektu.
Miałem:
Aby to zrobić, ja:
Polecenia git wyglądały mniej więcej tak:
Następnie wybrałem moją prośbę o funkcję jako gałąź dla mojego żądania ściągnięcia do oryginalnego projektu.
źródło
To prawie działało dla mnie:
Jedyną różnicą było to:
Musiałem zmienić tę ostatnią linię, aby git push utworzył gałąź upstream w moim repozytorium GitHub, tak żebym mógł z tego zrobić PR.
źródło
Dokonałem już zatwierdzenia, które chciałem móc izolować jako żądanie ściągnięcia z powrotem do bieżącej gałęzi.
Sprawdziłem więc nowy oddział
I tutaj moje rozwiązanie różni się od @Kevin Hakanson , ponieważ muszę zresetować tę gałąź do miejsca w historii, od którego chcę się różnić
I wybierz cherry zatwierdzenie, z którego chcę utworzyć izolowane żądanie ściągnięcia
Wreszcie popchnij go do pilota
I ściągnij żądanie danych shi.
źródło
Rozwiązanie polegające na utworzeniu nowego (tymczasowego) oddziału, wybranie go i utworzenie żądania ściągania dla tego oddziału nie spełniło moich oczekiwań. Nie chciałem zmieniać mojego repozytorium, aby udostępnić zestaw zatwierdzeń, więc wpadłem na następującą alternatywę:
Najpierw utwórz pliki łatek dla wszystkich interesujących cię zmian:
Jeśli okazuje się, że zatwierdzenie zainteresowania jest ostatnim, którego możesz użyć
HEAD
zamiast tego<sha>
.Teraz możesz wysłać poprawki do opiekuna repozytorium źródłowego, który może je zastosować:
Wreszcie powinno to wyglądać tak samo, jakby gałąź tymczasowa została scalona przez żądanie ściągnięcia, ale bez posiadania tej dodatkowej gałęzi w repozytorium wideł.
źródło
Na podstawie odpowiedzi @ kevin-hakanson napisałem ten mały skrypt bash, aby ułatwić ten proces. Dodanie repozytorium nadrzędnego, jeśli jeszcze nie istnieje (monit o adres URL), a następnie monit o podanie nazwy nowej gałęzi do utworzenia i tag / SHA zatwierdzenia do pobrania wiśniowego w tej gałęzi. Sprawdza, w której gałęzi lub zatwierdzeniu jesteś aktualnie, a następnie przechowuje wszelkie zmiany, abyś mógł pobrać nową gałąź. Strategia scalania zachowuje zmiany w stosunku do zatwierdzonego wyboru. Po wypchnięciu nowej gałęzi do
origin
(zakłada się, że jest to nazwa twojego zdalnego repo), gałąź lub zatwierdzenie, w którym byłeś wcześniej, jest ponownie sprawdzane, a twoje poprzednie zmiany wyskoczyły z ukrycia.(To zadziałało dla mnie w kilku prostych testach, ale nie jestem programistą bash ani ekspertem od gitów, więc daj mi znać, jeśli są przypadki, które przegapiłem, które można lepiej zautomatyzować!)
źródło