Возврат Git Merge - наш - PullRequest
2 голосов
/ 12 июля 2010

Я хочу отменить слияние, потому что вместо git merge -s recursive -X ours я использовал git merge -s ours.

Я прочитал эту запись в блоге об отмене слияний, но этопохоже, не работает для моего случая.

Итак, у меня есть ветвь master, а затем ветвь topic.В какой-то момент я слил master в topic, а затем слил topic в master.Когда я слил master в branch, у меня возник конфликт с файлом, но я решил, что он не сделал ничего важного, поэтому я решил сказать git, чтобы пропустить его и использовать мою версию.Именно тогда я использовал git merge -s ours вместо git merge -s recursive -X ours, который я узнал сегодня, что он игнорировал все, что сделал один из моих товарищей по команде.

Теперь я пытаюсь отменить это слияние:

git checkout master
git revert -m 2 c475f0ac

Это действительно внесение в дерево изменений, игнорируемых при моем слиянии (изменения моего товарища по команде).Проблема в том, что теперь мои изменения больше не находятся в дереве.Я попытался отменить возврат, но безуспешно.

Есть предложения о том, как отменить такое слияние?

1 Ответ

1 голос
/ 11 апреля 2011

Подкоманда revert создает новый коммит для отмены указанного коммита, это обычно сложно для возврата коммитов слияния

Вы можете установить дерево в состояние любого конкретного коммита, поиск коммита слияния (is c475f0ac?), а затем установите дерево для родительского состояния этого коммита (обратите внимание на точку в конце команды, это важно):

git checkout c475f0ac^ .

Если вы хотите установить состояние для другого родительского элементакоммит, вы должны использовать

git checkout c475f0ac^2 .

и так далее.Вы найдете полезной команду gitk для анализа коммитов перед продолжением (чтобы выбрать коммит, который вы хотите):

gitk c475f0ac

После установки состояния на предыдущий коммит вы можете зафиксировать

git commit --message 'restored tree to state previous to merge commit c475f0ac'

А затем нажмите

git push
...