Посмотрите на свой граф коммитов (с помощью gitk или аналогичной программы). Вы увидите коммиты из запроса на получение, и вы увидите свои собственные коммиты и коммит слияния (если это не было слияние с ускоренной перемоткой вперед). Вам просто нужно найти последний из ваших собственных коммитов перед слиянием и сбросить ветку на этот коммит.
(Если у вас есть ветвь reflog, еще проще найти коммит до слияния.)
(Изменить после получения дополнительной информации в комментариях :)
Хорошо, давайте посмотрим на график:
Я предполагаю, что последним (самым правым) коммитом было ваше неправильное слияние по запросу извлечения , которое слило синюю линию, показанную здесь. Ваш последний хороший коммит будет тем, что был ранее на черной линии, здесь отмечен красным:
Сбросьте до этого коммита, и у вас все будет хорошо.
Это означает, что в вашей локальной рабочей копии сделайте это (убедившись, что у вас больше нет незафиксированных файлов, например, с помощью git stash):
git checkout master
git reset --hard 7a62674ba3df0853c63539175197a16122a739ef
gitk
Теперь подтвердите, что вы действительно выполняете коммит, который я там пометил, и вы не увидите ничего из извлеченного материала в его происхождении.
git push -f origin master
(если ваш пульт Github назван origin
- иначе измените имя).
Теперь все должно выглядеть правильно на GitHub тоже. Коммиты по-прежнему будут находиться в вашем хранилище, но не будут доступны ни одной ветке, поэтому не должны причинять там никакого вреда. (И они все еще будут в хранилище RogerPaladin, конечно.)
(Возможно, существует специфический для Github веб-способ сделать то же самое, но я не слишком знаком с Github и его системой управления запросами на получение.)
Обратите внимание, что если кто-то уже мог вытащить вашего мастера с неверным коммитом, у него возникнет та же проблема, что и у вас, и он не сможет внести свой вклад. перед сбросом на новую версию мастера.
Если существует вероятность того, что это произошло, или вы просто хотите избежать каких-либо проблем, используйте git revert
команду вместо git reset
, чтобы отменить изменения с новым коммитом, вместо того, чтобы вернуться к более старому. (Некоторые люди думают, что вы никогда не должны делать сброс с опубликованными ветками.) Смотрите другие ответы на этот вопрос о том, как это сделать.
Для будущего:
Если вам нужны только некоторые коммиты ветви RogerPaladin, рассмотрите возможность использования cherry-pick
вместо merge
. Или свяжитесь с RogerPaladin, чтобы переместить их в отдельную ветку и отправить новый запрос на извлечение.