Spójrz na swój wykres zatwierdzenia (z gitk lub podobnym programem). Zobaczysz zatwierdzenia z żądania ściągnięcia i zobaczysz własne zatwierdzenia i zatwierdzenie scalające (jeśli nie było to szybkie scalanie do przodu). Musisz tylko znaleźć ostatnie własne zatwierdzenia przed scaleniem i zresetować gałąź do tego zatwierdzenia.
(Jeśli masz reflog gałęzi, znalezienie zatwierdzenia przed scaleniem powinno być jeszcze łatwiejsze).
(Edytuj po więcej informacji w komentarzach :)
OK, spójrzmy na wykres:
Zakładam, że ostatnim (najbardziej po prawej) zatwierdzeniem było twoje złe połączenie przez pull request , które połączyło niebieską linię widoczną tutaj. Twoim ostatnim dobrym zatwierdzeniem byłoby to, co wcześniej na czarnej linii, tutaj zaznaczone na czerwono:
Zresetuj do tego zatwierdzenia i powinno być dobrze.
Oznacza to, że w swojej lokalnej kopii roboczej zrób to (po upewnieniu się, że nie masz więcej niezaangażowanych rzeczy, na przykład przez git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
Teraz potwierdź, że naprawdę jesteś na zatwierdzeniu, które tam zaznaczyłem, a nie zobaczysz żadnego z wyciągniętych rzeczy w jego przodkach.
git push -f origin master
(jeśli nazwany jest twój pilot github origin
- w przeciwnym razie zmień nazwę).
Teraz też wszystko powinno wyglądać dobrze na githubie. Zatwierdzenia nadal będą w twoim repozytorium, ale nie będą dostępne dla żadnej gałęzi, więc nie powinny tam wyrządzić żadnej szkody. (I oczywiście nadal będą w repozytorium RogerPaladin).
(Może istnieć specyficzny dla serwisu Github sposób na zrobienie tego samego, ale nie jestem zbyt zaznajomiony z Githubem i jego systemem zarządzania żądaniami ściągnięcia).
Zauważ, że jeśli ktoś inny mógł już wyciągnąć twojego mastera z niewłaściwym zatwierdzeniem, wtedy ma ten sam problem, co obecnie i nie może tak naprawdę wnieść wkładu. przed zresetowaniem do nowej wersji głównej.
Jeśli jest prawdopodobne, że tak się stało, lub po prostu chcesz uniknąć problemów, użyj git revert
polecenia zamiast git reset
, aby cofnąć zmiany nowym zatwierdzeniem, zamiast przywracać starsze. (Niektórzy uważają, że nigdy nie powinieneś resetować z opublikowanymi gałęziami.) Zobacz inne odpowiedzi na to pytanie, jak to zrobić.
Na przyszłość:
Jeśli chcesz tylko niektórych zatwierdzeń gałęzi RogerPaladin, rozważ użycie cherry-pick
zamiast merge
. Lub skontaktuj się z RogerPaladin, aby przenieść je do oddzielnej gałęzi i wysłać nowe żądanie ściągnięcia.