Какие-либо инструменты перебазируют ветку в Git при запуске go fmt каждый коммит отдельно?

Я хочу перестроить / перебазировать все коммиты в ветке Git X используя инструмент форматирования исходного кода, как go fmt или же indent,

Я ожидаю, что рабочий процесс будет примерно состоять из создания новой ветви master и итерации следующего с $_ начиная с коммитов в X:

git cherry-pick $_
go fmt ...
git commit -a --amend

Или, может быть, даже

git cherry-pick -n $_
go fmt ...
git cherry-pick --continue

Я бы не ожидал -n а также --continue играть вместе так, хотя. Кроме того, естественно сделать go fmt обязательство X а также go diff X new когда сделано.

Тем не менее, есть много шагов, которые могут пойти не так с этой процедурой, как -a пытаясь изменить файлы, которые не были изменены в исходном коммите, go fmt путаница патчей Git, изменение дат фиксации Git и т. д.

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

1 ответ

Решение

но если быстрый инструмент или более простой рабочий процесс делают это более чисто, то я хотел бы знать об этом.

Как упоминает Joseph K. Strauss в комментариях, git filter-branch должно быть достаточно, плюс go fmt используя обозначение из трех точек:

git filter-branch --tree-filter 'go fmt ...'

Вы можете прочитать (намного) больше о filter-branch на " git filter-branch - отменить изменения в наборе файлов в диапазоне коммитов ".

Эта команда будет работать со всеми локальными ветвями и будет изменять историю (поскольку для каждого измененного коммита будет сгенерирован новый SHA1).
git push --force может потребоваться опубликовать новую историю в своем репозитории верхнего уровня: предупредите других соавторов, чтобы они сбросили свои локальные репозитории.

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