Есть ли способ, которым я могу отменить толчок мерзавца, который не последний - PullRequest
0 голосов
/ 19 ноября 2018

мой порядок коммитов git, как показано ниже:

commit A ==> commit B(merge master) ==> commit C ==> commit D

коммит B используется для извлечения и слияния мастера, а после этого коммита C и D используется для добавления / изменения файла. Каждый коммит был удаленным.

Однако при фиксации D push remote, ** мастер отката **. Затем моя ветвь имеет некоторый код, который получен из коммита B (мастер слияния), и текущий мастер не имеет для него отката.

Чтобы не отставать от мастера, я снова тяну и объединяю мастера, но безрезультатно. Так есть ли способ удалить коммит B (мастер слияния)? после этого поток фиксации выглядит как:

commit A ==> commit C ==> commit D.

Каждый совет будет очень полезен.

1 Ответ

0 голосов
/ 19 ноября 2018

Учитывая, что ветвь и ее коммит слияния уже отправлены на удаленный сервер и являются публичными, мы должны быть осторожны и избегать переписывания истории этой ветки. Безопасным вариантом было бы отменить коммит слияния B:

git checkout your_branch
git revert -m 1 <SHA-1 hash of B>

Это предполагает, что вы хотите следовать первому родителю слияния. Если нет, тогда используйте -m 2. Вы можете проверить git log, чтобы убедиться, что первый родитель следует за коммитом A.

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

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