Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I format all commits in a branch?

I'd like to run an auto-formatting tool (e.g. Prettier, go fmt, clang-format, terraform fmt ...) on all commits in a branch. I could manually edit each commit in the branch using an interactive rebase (git rebase -i) but that is quite tedious if there are a lot of commits on the branch.

How do I automatically apply the auto-formatting to each commit in the branch?

like image 886
qff Avatar asked Oct 12 '25 12:10

qff


1 Answers

You can use git rebase --exec like so:

git rebase \
  --strategy-option=theirs \
  --exec '<formatting/linting command here>; git add --update; git commit --amend --no-edit' <base branch, e.g. "main" or "master">

Using multiple --exec flags is mostly not workable as every --exec needs to run both git add and git commit for it to apply and not stop the rebase. To see the effect of the --exec flag pass --interactive (or -i for short) and you'll see the interactive rebase that it's doing under the hood (and shows why multiline strings in --exec are not allowed).

Source: https://blog.scottlogic.com/2019/03/04/retroactively-applying-prettier-to-existing-branches.html

Note: This is also possible using git filter-branch --tree-filter but that command is now discouraged and produces a warning when invoked on the command-line. The suggested alternative git-repo-filter cannot do this directly, but contains an example lint-history-command which is able to do this.

like image 178
qff Avatar answered Oct 14 '25 06:10

qff