Как перемещаться git фиксирует от мастера к другой существующей ветке
Я проверил несколько коммитов на master
, которые должны были быть отмечены в develop
. Какие команды 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 до последнего хорошего коммита, и все, что вам нужно сделать, - это удалить строку фиксации для перехода в ветвь