Неинтерактивное исправление до указанного хэша
Допустим, у меня есть час коммитов
* 7bd4815 (HEAD) four
* afe9410 third
* db064dd second
* 46ab932 first
Там нет незафиксированных изменений. То, что я хочу сделать, это не интерактивно раздавить все после first
, внутрь. Я хочу эквивалент
pick 46ab932 first
fixup db064dd second
fixup afe9410 third
fixup 7bd4815 four
Здесь я использую четыре коммита в качестве примера, но фактическое количество коммитов будет различным. Я буду знать хэш коммита, так что это то, что я хотел бы использовать.
Поиск этого был бесплодным (я, вероятно, не ищу правильные термины), поскольку я нахожу много решений, но никогда не для этой точной ситуации.
1 ответ
Это решение аналогично моему решению объединить или перебазировать произвольно большое количество коммитов. По сути, вы хотите использовать мягкий сброс, чтобы добиться того же эффекта, что и в сквоше / фиксинге, с последующим коммитом.
В следующих решениях я буду использовать термин "первый" для обозначения коммита sha первого коммита (как показано в примере исходного плаката), а "четвертый" для обозначения последнего коммита sha, в котором находится HEAD.
Решение 1: Мягкий сброс с Amend
git reset --soft first
git commit --amend --no-edit
# Verify results
git diff fourth
Решение 2. Мягкий сброс без изменения
Это требует от вас сброса к родителю первого коммита, чтобы избежать необходимости вносить изменения:
git reset --soft first^
git commit -C first
# Verify results
git diff fourth
-C
вариант git commit
повторно использует сообщение коммита first
,