Была одна ветка, master. Последний коммит в этой ветке на гитхабе был не очень, поэтому я создал новую ветку (second) на основе предыдущего коммита Master. Теперь мне нужно сохранить изменения, которые я сделал во второй ветке (second), и слить в ветку master, перезаписав все файлы на ней. Как это сделать?
Ответ
Если репозиторий на GitHub только ваш и больше никто им не пользуется
И если вы точно хотите отбросить изменения из последнего коммита, который «не очень».
Можно «переставить» ветку master на тот же коммит, на который смотрит second
git checkout master
git reset --hard second
А потом отправить изменения на GitHub.
git push -f origin master
Последний коммит, который «не очень», останется в репозитории на некоторое время и будет доступен через git reflog, после чего будет удалён насовсем.
Если репозиторий не только ваш
Тогда переписывать ветку master нельзя.
Будем откатывать нежелательный коммит с помощью git revert
git checkout master
git revert HEAD
В ветке master появится новый коммит, отменяющий изменения, которые внесены в нежелательном.
В результате состояние файлов будет как в коммите, где ветки разошлись.
Теперь можно перенести результат из ветки second.
git merge second
Почему нельзя просто замержить?
Потому что изменения из нежелательного коммита никуда не денутся.
Их нужно явным образом откатить.
Комментариев нет:
Отправить комментарий