Я проверил несколько коммитов на master, которые должны были быть отмечены в develop. Какие команды git я использовал для удаления этих коммитов из главной ветки и их включить в ветку разработки?
Как перемещаться git фиксирует от мастера к другой существующей ветке
Ответ 1
Если я не ошибаюсь, у вас было две синхронизированные ветки,
master и dev, и просто забыл переключить ветвь,
перед вашими фиксациями.
Если это так, мы имеем:
----------------
git log in dev
xxx
yyy
...
----------------
и
----------------
git log in master
ccc
bbb
aaa
<---- here you forgot to switch branch
xxx
yyy
...
----------------
Решение:
Сначала убедитесь, что:
git status -s
возвращает пустые результаты.
Затем получите все свои новые коммиты от master до dev с помощью:
git checkout dev
git merge master
Теперь вернемся к вам master:
git checkout master
Удалите ненужные коммиты:
git reset --hard HEAD~3
Число ~3 - это количество коммитов, которые вы хотите удалить.
Помните: git status -s должны возвращать пустые результаты.
В противном случае git reset --hard может привести к потере данных.
Ответ 2
Для справки в другую ветку вы можете использовать выбор вишни:
git cherry-pick <commit>
Удаление не так просто. Вы можете использовать rebase и squash или редактировать фиксацию:
git rebase -i <commit>~1
Но я не уверен, когда вы редактируете редактирование во время rebase, если вы можете редактировать файлы также, а не только сообщение commit.
Ответ 3
Вы можете cherry-pick выполнить свои обязательства перед develop, а затем в интерактивном режиме rebase ветвь master:
-
git checkout develop -
git cherry-pick aabbcc -
git cherry-pick ddeeff - ....
-
git checkout master -
git rebase 123456 -i
где 123456 является фиксацией, прежде чем вы сделали ошибку. Это откроет редактор, который отображает каждую фиксацию, на которую повлияет перебаза. Удалите строки, соответствующие сообщениям, которые вы хотите сбросить, и выйдите из редактора.
Ответ 4
Обычно существует несколько способов сделать одно и то же в git одним из возможных способов:
git checkout develop
git cherry-pick XXX // XXX being the sha1 of the commit you want to grab
git checkout master
git rebase --interactive HEAD~IDX // IDX being the position of the last "good" commit compared to HEAD
Последняя команда отобразит весь обзор от HEAD до последнего хорошего коммита, и все, что вам нужно сделать, - это удалить строку фиксации для перехода в ветвь