Неинтерактивное исправление до указанного хэша

Допустим, у меня есть час коммитов

* 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,

Документация

Другие вопросы по тегам