在每次提交时分别运行 go fmt 时,是否有任何工具在 Git 中对分支进行变基?
Any tools rebase a branch in Git while running go fmt each commit separately?
我希望 rebuild/rebase 使用 go fmt
或 indent
等源代码格式化工具 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
会像那样一起玩。此外,完成后自然应该对 X
和 go 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
才能将新历史发布到其上游存储库:一定要警告其他协作者,让他们重置本地存储库。
我希望 rebuild/rebase 使用 go fmt
或 indent
等源代码格式化工具 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
会像那样一起玩。此外,完成后自然应该对 X
和 go 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
才能将新历史发布到其上游存储库:一定要警告其他协作者,让他们重置本地存储库。