Zrobiłem żądanie ściągnięcia, ale potem wykonałem kilka zatwierdzeń projektu lokalnie, co zakończyło się zanieczyszczeniem mojego żądania ściągnięcia, próbowałem go usunąć, ale bez powodzenia.
Znalazłem kilka podobnych pytań w StackOverflow, ale nie mogę zastosować tego, co tam jest. To moja pierwsza prośba o ściągnięcie na GitHubie, więc jest dla mnie trochę dziwne, jak to wszystko działa.
Podświetlone zatwierdzenie jest tym, które muszę zachować i usunąć wszystkie inne rzeczy. Staje się czwartym zatwierdzeniem w historii, ponieważ robię kilka rzeczy do scalania.
Czy ktoś może wyjaśnić, co się dzieje i jak rozwiązać ten problem?
git
github
pull-request
humazed
źródło
źródło
what branch
= gałąź, nad którą pracujesz,onto what branch
= gałąź, do której ściągasz żądanieOdpowiedzi:
Masz na to kilka technik.
Ten post - przeczytaj część o przywracaniu , wyjaśni szczegółowo, co chcemy zrobić i jak to zrobić.
Oto najprostsze rozwiązanie Twojego problemu:
Polecenie revert utworzy nowe zatwierdzenie z cofnięciem pierwotnego zatwierdzenia.
źródło
Ludzie nie chcieliby widzieć niewłaściwego zatwierdzenia i cofnięcia zobowiązania, aby cofnąć zmiany niewłaściwego zatwierdzenia. To zanieczyszcza historię.
Oto prosty sposób na usunięcie niewłaściwego zatwierdzenia zamiast cofania zmian za pomocą rewizji zatwierdzenia.
git checkout my-pull-request-branch
git rebase -i HEAD~n
// gdzien
to liczba ostatnich zatwierdzeń, które chcesz uwzględnić w interaktywnym rebase.pick
wdrop
przypadku zatwierdzeń, które chcesz odrzucić.git push --force
źródło
git push origin HEAD:myBranch --force
. Ale poza tym świetny i pomocny.pick
zdrop
za zobowiązuje chcesz odrzucić.”?git rebase -i HEAD~<n>
, na górze pliku będą<n>
wiersze zatwierdzeń, z każdą linią zawierającą tekstpick <commit id>
. Commits mają domyślnie wartośćpick
, więc dla każdego zatwierdzenia, które chcesz usunąć, zmień tekstpick
nadrop
Jeśli usuwasz zatwierdzenie i nie chcesz zachować jego zmian, @ferit ma dobre rozwiązanie.
Jeśli chcesz dodać to zatwierdzenie do bieżącej gałęzi, ale nie ma sensu być częścią bieżącej pr, możesz zamiast tego wykonać następujące czynności:
git rebase -i HEAD~n
git reset HEAD^ --soft
aby cofnąć zatwierdzenie zmian i przywrócić je do stanu etapowego.git push --force
aby zaktualizować zdalną gałąź bez usuniętego zatwierdzenia.Teraz usunąłeś zatwierdzenie ze swojego pilota, ale nadal będziesz mieć zmiany lokalnie.
źródło
Więc wykonaj następujące czynności,
Powiedzmy, że nazwa twojej gałęzi to my_branch i zawiera dodatkowe zatwierdzenia.
git checkout -b my_branch_with_extra_commits
(Zachowanie tej gałęzi pod inną nazwą)gitk
(Otwiera konsolę git)git checkout my_branch
gitk
(Spowoduje to otwarcie konsoli git)reset branch to here
”git pull --rebase origin branch_name_to _merge_to
git cherry-pick <SHA you copied in step 3. >
Teraz spójrz na historię zatwierdzeń lokalnego oddziału i upewnij się, że wszystko wygląda dobrze.
źródło
To mi pomogło:
Utwórz nowy oddział z istniejącym. Nazwijmy istniejący
branch_old
i nowy jakobranch_new
.Zresetuj
branch_new
do stabilnego stanu, gdy nie miałeś żadnego problemu z zatwierdzeniem. Na przykład, aby umieścić go na poziomie lokalnego mistrza, wykonaj następujące czynności:git reset - hard master git push - force origin
cherry-pick
zatwierdzenia zbranch_old
dobranch_new
git push
źródło