git revert ‹hash› не разрешен из-за слияния, но не указана опция -m

Я пытаюсь вернуться к определенному числу «хеш» в git с помощью команды «возврат».

Я использую следующую команду:

git revert c14609d74eec3ccebafc73fa875ec58445471765

Но я получаю следующее:

ошибка: Commit c14609d74eec3ccebafc73fa875ec58445471765 — это слияние, но опция -m не указана.
фатальная ошибка: возврат не выполнен

Как новый пользователь git, не могли бы вы объяснить, что происходит и что мне нужно сделать, чтобы решить эту проблему.

Я хочу вернуться к этому определенному коммиту (c14609d74eec3ccebafc73fa875ec58445471765), который я вижу при запуске git log.


person user3544484    schedule 19.06.2014    source источник
comment
возможный дубликат Отменить слияние Git?   -  person    schedule 19.06.2014


Ответы (2)


Вы пытаетесь отменить фиксацию слияния, а git не знает, к какому родителю вернуться. -m позволяет нам выбирать, какого родителя выбрать. Посмотрите фиксацию слияния и запишите, к какому родителю вы хотите перейти. Информацию о родителях можно увидеть в git log, например:

совершить d02ee0f2179def10277f30c71c5d6f59ded3c595

Слияние: dd3a24c 2462a52

и запустите:

git revert <hash> -m 1

где 1 указывает родительский номер 1.

Если вы пытаетесь вернуться к этому коммиту, сделайте следующее:

git reset --hard <hash>

Поймите разницу между git revert и git reset из документации и решите, какой из них вам нужен. git revert — более безопасный вариант, но на самом деле он не делает того, что вам нужно. Он просто возвращает изменения (набора) фиксации. git reset заставляет вас перейти к определенному коммиту в истории и перепишет вашу историю.

person manojlds    schedule 19.06.2014
comment
manojlds, какую полную команду git log вы выполнили, чтобы увидеть родителя? - person Tola Odejayi; 16.11.2017
comment
Как определить, кто из родителей? т. е. Как мне узнать, что нужно ввести число 1 против. 2 или что-то другое? - person Matthew James Briggs; 01.07.2018
comment
Первоначально я объединил ветку dev с master. При возврате коммита я использовал 1 в качестве значения -m, что помогло. - person Hasan Akhtar; 23.10.2018

Я хочу вернуться к...

Тогда вы не хотите git revert, по крайней мере, не так. git revert предназначен для отмены конкретных изменений, внесенных в этот коммит. Вам нужно вернуть или отменить все изменения, сделанные после этой фиксации.

git reset — это команда для использования здесь.

git reset --hard c14609d74eec3ccebafc73fa875ec58445471765 полностью сбрасывает вашу ветку, индекс и рабочее дерево на этот конкретный коммит.

Обратите внимание, что применяются обычные меры предосторожности: если кто-то уже получил более поздние коммиты, удаление их из истории таким образом усложняет им задачу. Если вместо этого вы хотите создать новый коммит, который просто восстанавливает состояние коммита c14609d74eec3ccebafc73fa875ec58445471765, вы можете использовать git rm и git checkout:

git rm -r .
git checkout c14609d74eec3ccebafc73fa875ec58445471765 .

(Значок rm необходим, чтобы убедиться, что вновь добавленные файлы также будут удалены.) Это позволяет вам затем создать новый коммит поверх вашей локальной истории, который отменяет все изменения, начиная с c14609d74eec3ccebafc73fa875ec58445471765.

person Community    schedule 19.06.2014