在每次提交时分别运行 go fmt 时,是否有任何工具在 Git 中对分支进行变基?

Any tools rebase a branch in Git while running go fmt each commit separately?

我希望 rebuild/rebase 使用 go fmtindent 等源代码格式化工具 Git 分支 X 中的所有提交。

我希望工作流程大致包括在 master 上创建一个新分支,并在 X 中的提交范围内使用 $_ 迭代以下内容:

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

甚至可能

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

不过我没想到 -n--continue 会像那样一起玩。此外,完成后自然应该对 Xgo diff X new 进行 go fmt 提交。

但是,此过程中有许多步骤可能会出错,例如 -a 试图更改原始提交中未更改的文件,go fmt 令人困惑 Git 的补丁,Git 更改提交日期等

这些都不是特别麻烦,但如果有快速工具或更简单的工作流程可以更干净地完成此操作,那么我很想知道。

but if a quick tool or simpler workflow does this more cleanly, then I'd love to know about it.

作为Joseph K. Strauss mentions , git filter-branch should be enough, plus go fmt using the three dot notation:

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

您可以在“git filter-branch - discard the changes to a set of files in a range of commits”处阅读有关过滤器分支的(很多)更多信息。

该命令将 运行 针对所有本地分支,并将更改历史记录(因为将为每个修改的提交生成新的 SHA1)。
可能需要 git push --force 才能将新历史发布到其上游存储库:一定要警告其他协作者,让他们重置本地存储库。