Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Как отменить merge, не потеряв код?

Разработку вел в master. Потом сделал валидацию в ветке validation и gui в ветке gui. Нужно было выложить на гитхаб разными ветками это. А я смерджил в master и validation и gui и только после этого отправил на гитхаб. Можно как то исправить?
Мне важно что бы именно на гитхабе они отображались как разные ветки. Поэтому если есть способ на самом сайте их разделить визуально, при этом на компьютере оставив слитыми, то такой способ мне тоже подойдет.
Код в этих ветках меня устраивает, и при слиянии не было никаких конфликтов. Хочу разделить, только потому что люди, которые будут изучать проект на гитхабе должны четко понимать, где закончилась ветка master. Т.е. только небольшая часть проекта должна быть в мастер. А у меня получилось, что весь проект в master.


Ответ

Во-первых, потерять код в git не так-то легко. Если что, у вас всегда есть git reflog, чтобы восстановить потерянный коммит. А ещё всегда можно сделать бэкап текущей ветки с помощью git branch backup (имя произвольное).
Дальше, нужно откатить ветку master до коммита перед слиянием: git reset --hard commit-name. Подробнее: Как вернуться (откатиться) к более раннему коммиту?
Просто так запушить ветку не получится, т.к. на гитхабе теперь есть коммиты, которых в вашей ветке нет, поэтому не получится автоматический fast-forward merge. Поможет git push -f. Эта команда заменяет содержимое удаленной ветки.
Осталось запушить остальные ветки. Чтобы каждый раз не указывать локальную и удаленную ветку, можете однажды назначить локальной ветке удаленную upstream-ветку:
git push -u origin master git push -u origin validation git push -u origin gui
Можно запушить все ветки сразу (вообще все в refs/heads/):
git push -u --all origin Branch master set up to track remote branch master from origin. Branch validation set up to track remote branch validation from origin. Branch gui set up to track remote branch gui from origin.

Комментариев нет:

Отправить комментарий