Похоже, git думает, что fa4a761
- это сокращенный идентификатор для BLOB
(содержимого файла), а не для COMMIT
.
Я предполагаю, что вы получили идентификатор фиксации надежным способом, и что вы не просто набрали его неправильно.
Это было бы ошеломляющее совпадение, но мне интересно, совпадают ли первые 7 символов идентификатора вашей целевой фиксации с первыми 7 символами идентификатора BLOB
? (Я бы догадался, если бы это произошло, git выдаст ошибку, сказав, что аббревиатура была неоднозначной, но я не уверен и у меня нет простого способа проверить это ...)
Так что вы можете попробовать использовать, скажем, первые 10 цифр идентификатора коммита. Или вы можете использовать выражение, подобное old_release_branch~2
, для определения 3-го до последнего коммита в ветке релиза, чтобы не пришлось правильно копировать значения идентификатора коммита.
Еще один вариант, который может подойти для вашего случая, а также, во-первых, избавит вас от необходимости делать так много с ID фиксации, - это использовать rebase
вместо cherry-pick
. Это хороший вариант, если вы хотите диапазон коммитов, которые не являются слияниями. Например, звучит так, как будто у вас есть серия «исправлений», не связанных с слиянием, между неудачным слиянием (которое вы воссоздали) и старой веткой.
git rebase --onto new_release_branch <bad_merge> old_release_branch
В этой команде <bad_merge>
может быть идентификатором старого коммита слияния или любым выражением, которое преобразуется в коммит слияния. Например, если у вас было 3 коммита исправления ошибок после слияния, вы могли бы сказать old_release_branch~3
.
Кроме того, вы упомянули, что сделали бы что-то другое, если ветви функций не были удалены. Я не совсем уверен, что вижу что вы бы сделали по-другому, потому что в конечном итоге вам все равно придется извлечь исправленные исправления непосредственно из старой ветки релиза, я думаю. Но если это действительно имеет значение, вы всегда можете воссоздать ветви функций. Когда вы удаляете объединенную ветку, на самом деле ничего важного не теряется.
Например, если у вас есть
... x -- M -- x -- x <--(release)
/
... A -- B -- O
вы видите, что что-то было объединено с коммитами релиза 3 назад, но я думаю, что ветвь функции была удалена. Вы могли бы, вероятно, извлечь его имя из сообщения фиксации слияния (предполагая, что вы сохраняете сообщение по умолчанию или заменяете его чем-то более разумным), но если нет, вы все равно можете придумать имя.
git checkout release~2^2
git branch replacement_feature_branch_name