在一系列git提交上运行git-clang-format

Chr*_*son 6 git formatting clang clang-format

我写了一系列git提交,代码格式很糟糕.
在我将它们推送到github之前,我想git-clang-format在每次提交时运行,以便在我的历史记录中获得格式良好的代码.

有一些组合rebasegit-clang-format这将做到这一点?

Von*_*onC 10

这看起来像是一份工作git filter-branch,可以重写你想要的提交.由于这些提交还没有被推送,改变它们的内容(以及它们的SHA1)并不是什么大问题.
除了你可以为每个重放的提交运行任何命令之外,效果类似于rebase或cherry-picking的功能.

您可以运行filter-branch在过去的几年提交:

请参阅Elliot Chance的 " 重新格式化您的代码库git filter-branch "

git filter-branch --tree-filter 'git-clang-format' -- <SHA1>..HEAD
Run Code Online (Sandbox Code Playgroud)

考虑到git-clang-format语法,您只能将其应用于每个提交中的已更改文件.
例如,对于.cpp文件:

git filter-branch --tree-filter 'git-clang-format $(\
  git diff-index --diff-filter=AM --name-only $GIT_COMMIT |\
    grep .cpp)' -- <SHA1>..HEAD
Run Code Online (Sandbox Code Playgroud)

2017年更新,使用Git 2.14.x/2.15(2017年第4季度),您有一个例子:

Brandon Williams()提交2118805,提交6134de6(2017年8月14日).(由Junio C Hamano合并- -提交a36f631,2017年9月25日)mbrandonw
gitster

Makefile:添加样式构建规则

添加stylegit-clang-format在HEAD和当前工作树之间的差异上运行的构建规则.
结果是建议更改的差异.

.PHONY: style
style:
    git clang-format --style file --diff --extensions c,h
Run Code Online (Sandbox Code Playgroud)