Какие-либо инструменты перебазируют ветку в 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
может потребоваться опубликовать новую историю в своем репозитории верхнего уровня: предупредите других соавторов, чтобы они сбросили свои локальные репозитории.