Как отменить коммит слияния, который уже передан в удаленную ветку? - PullRequest
740 голосов
/ 18 августа 2011

git revert <commit_hash> один не будет работать.-m должно быть указано, и я довольно смущен этим.

Кто-нибудь испытывал это раньше?

Ответы [ 13 ]

1 голос
/ 02 ноября 2018

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

Допустим, у нас есть ветви A и B .. Вы слили ветвь A в ветвь B и толкнули ветвь B к себе, так что теперь это слияние является частью этого ... Но вы хотите вернуться к последнему коммиту перед тем, как Слияние .. Что ты делаешь?

  1. Перейдите в корневую папку git (обычно это папка проекта) и используйте git log
  2. Вы увидите историю последних коммитов - коммиты имеют свойства commit / author / date, а слияния также имеют свойство merge - так что вы видите их так:

    commit: <commitHash> Merge: <parentHashA> <parentHashB> Author: <author> Date: <date>

  3. Используйте git log <parentHashA> и git log <parentHashB> - вы увидите истории коммитов этих родительских веток - первые коммиты в списке самые последние

  4. Возьмите <commitHash> коммита, который вы хотите, перейдите в вашу корневую папку git и используйте git checkout -b <newBranchName> <commitHash> - это создаст новую ветку, начиная с того последнего коммита, который вы выбрали до слияния. Вуаля, готово!
1 голос
/ 24 февраля 2017

Я обнаружил, что создание обратного патча между двумя известными конечными точками и применение этого патча будет работать. Это предполагает, что вы создали моментальные снимки (теги) из своей основной ветви или даже резервную копию своей основной ветви, скажем, master_bk_01012017.

Скажем, ветвь кода, которую вы объединили в master, была mycodebranch.

  1. Оформить заказ мастеру.
  2. Создайте полное двоичное обратное исправление между мастером и резервной копией. git diff --binary master..master_bk_01012017 > ~/myrevert.patch
  3. Проверьте ваш патч git apply --check myrevert.patch
  4. Применить патч с выходом git am --signoff < myrevert.patch
  5. Если вам нужно будет снова ввести этот код, как только он будет исправлен, вам нужно будет разветвиться от возвращенного мастера и извлечь ветку исправлений git branch mycodebranch_fix git checkout mycodebranch_fix
  6. Здесь вам нужно найти ключ SHA для возврата и отменить возврат git revert [SHA]
  7. Теперь вы можете использовать mycodebranch_fix для исправления проблем, фиксации и повторного слияния с мастером, как только это будет сделано.
0 голосов
/ 20 марта 2017

Как упоминал Райан, git revert может затруднить слияние в будущем, поэтому git revert может оказаться не тем, что вы хотите. Я обнаружил, что использование команды git reset --hard <commit-hash-prior-to-merge> более полезно здесь.

Как только вы выполнили часть жесткого сброса, вы можете принудительно нажать на удаленную ветвь, то есть git push -f <remote-name> <remote-branch-name>, где <remote-name> часто называют origin. С этого момента вы можете повторно объединить, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...