Repository: git-town/git-town

Issue:
Git Town should test on the oldest version of Git
Today I tried to run the Git Town test suite on an Ubuntu VM and it failed. It turns out that the `--include-root-refs` flag I added in https://github.com/git-town/git-town/pull/4791 was [added in version 2.45.0](https://github.com/search?q=repo%3Agit%2Fgit+path%3A%2F%5EDocumentation%5C%2FRelNotes%5C%2F%2F+--include-root-refs&type=code).

We should run tests in CI using the oldest version of Git we say we support.

- [x] Revert #4791
- [x] Add GitHub Actions workflow to build Git v2.30.0 and run tests with it
- [x] Reapply #4791 in a way that is compatible with Git v2.30.0

Discussion:
@kevgo: Good catch, and thanks for the quick fix! 🙌 

Solution patch:
diff --git a/features/append/on_feature_branch/verbose/enabled.feature b/features/append/on_feature_branch/verbose/enabled.feature
index 5246a6974..6271c3c79 100644
--- a/features/append/on_feature_branch/verbose/enabled.feature
+++ b/features/append/on_feature_branch/verbose/enabled.feature
@@ -13,35 +13,35 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH   | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | existing | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git log main..existing --format=%s --reverse                                                                                                                                                                                                                                                                                                                            |
-      | existing | frontend | git merge --no-edit --ff main                                                                                                                                                                                                                                                                                                                                           |
-      |          | frontend | git merge --no-edit --ff origin/existing                                                                                                                                                                                                                                                                                                                                |
-      |          | backend  | git rev-parse --verify -q refs/heads/existing                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git rev-list --left-right existing...origin/existing                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --verify -q refs/heads/existing                                                                                                                                                                                                                                                                                                                           |
-      | existing | frontend | git checkout -b new                                                                                                                                                                                                                                                                                                                                                     |
-      |          | backend  | git rev-parse --verify -q refs/heads/existing                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config git-town-branch.new.parent existing                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git rev-parse --verify -q refs/heads/existing                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH   | TYPE     | COMMAND                                              |
+      |          | backend  | git version                                          |
+      |          | backend  | git rev-parse --show-toplevel                        |
+      |          | backend  | git config -lz --includes --global                   |
+      |          | backend  | git config -lz --includes --local                    |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |          | backend  | git status -z --ignore-submodules                    |
+      |          | backend  | git rev-parse --verify -q MERGE_HEAD                 |
+      |          | backend  | git rev-parse --absolute-git-dir                     |
+      |          | backend  | git remote                                           |
+      | existing | frontend | git fetch --prune --tags                             |
+      |          | backend  | git stash list                                       |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}            |
+      |          | backend  | git remote get-url origin                            |
+      |          | backend  | git log main..existing --format=%s --reverse         |
+      | existing | frontend | git merge --no-edit --ff main                        |
+      |          | frontend | git merge --no-edit --ff origin/existing             |
+      |          | backend  | git rev-parse --verify -q refs/heads/existing        |
+      |          | backend  | git rev-list --left-right existing...origin/existing |
+      |          | backend  | git rev-parse --verify -q refs/heads/existing        |
+      | existing | frontend | git checkout -b new                                  |
+      |          | backend  | git rev-parse --verify -q refs/heads/existing        |
+      |          | backend  | git config git-town-branch.new.parent existing       |
+      |          | backend  | git rev-parse --verify -q refs/heads/existing        |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |          | backend  | git config -lz --includes --global                   |
+      |          | backend  | git config -lz --includes --local                    |
+      |          | backend  | git stash list                                       |
     And Git Town prints:
       """
       Ran 28 shell commands.
@@ -50,22 +50,22 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH   | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | new      | frontend | git checkout existing                                                                                                                                                                                                                                                                                                                                                   |
-      | existing | frontend | git branch -D new                                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git config --unset git-town-branch.new.parent                                                                                                                                                                                                                                                                                                                           |
+      | BRANCH   | TYPE     | COMMAND                                          |
+      |          | backend  | git version                                      |
+      |          | backend  | git rev-parse --show-toplevel                    |
+      |          | backend  | git config -lz --includes --global               |
+      |          | backend  | git config -lz --includes --local                |
+      |          | backend  | git status -z --ignore-submodules                |
+      |          | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |          | backend  | git rev-parse --absolute-git-dir                 |
+      |          | backend  | git stash list                                   |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |          | backend  | git remote get-url origin                        |
+      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |          | backend  | git remote get-url origin                        |
+      | new      | frontend | git checkout existing                            |
+      | existing | frontend | git branch -D new                                |
+      |          | backend  | git config --unset git-town-branch.new.parent    |
     And Git Town prints:
       """
       Ran 15 shell commands.
diff --git a/features/compress/current_branch/verbose/verbose.feature b/features/compress/current_branch/verbose/verbose.feature
index 68ee02c4e..5e386d886 100644
--- a/features/compress/current_branch/verbose/verbose.feature
+++ b/features/compress/current_branch/verbose/verbose.feature
@@ -15,31 +15,31 @@ Feature: compress the commits on a feature branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH  | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |         | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |         | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | feature | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      | (none)  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | git cherry -v main feature                                                                                                                                                                                                                                                                                                                                              |
-      |         | git show --no-patch --format=%B {{ sha-before-run 'commit 1' }}                                                                                                                                                                                                                                                                                                         |
-      | feature | git reset --soft main                                                                                                                                                                                                                                                                                                                                                   |
-      |         | git commit -m "commit 1"                                                                                                                                                                                                                                                                                                                                                |
-      | (none)  | git rev-list --left-right feature...origin/feature                                                                                                                                                                                                                                                                                                                      |
-      | feature | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      | (none)  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | COMMAND                                                         |
+      |         | git version                                                     |
+      |         | git rev-parse --show-toplevel                                   |
+      |         | git config -lz --includes --global                              |
+      |         | git config -lz --includes --local                               |
+      |         | git rev-parse --verify --abbrev-ref @{-1}                       |
+      |         | git status -z --ignore-submodules                               |
+      |         | git rev-parse --verify -q MERGE_HEAD                            |
+      |         | git rev-parse --absolute-git-dir                                |
+      |         | git remote                                                      |
+      |         | git branch --show-current                                       |
+      | feature | git fetch --prune --tags                                        |
+      | (none)  | git stash list                                                  |
+      |         | git -c core.abbrev=40 branch -vva --sort=refname                |
+      |         | git remote get-url origin                                       |
+      |         | git cherry -v main feature                                      |
+      |         | git show --no-patch --format=%B {{ sha-before-run 'commit 1' }} |
+      | feature | git reset --soft main                                           |
+      |         | git commit -m "commit 1"                                        |
+      | (none)  | git rev-list --left-right feature...origin/feature              |
+      | feature | git push --force-with-lease --force-if-includes                 |
+      | (none)  | git -c core.abbrev=40 branch -vva --sort=refname                |
+      |         | git config -lz --includes --global                              |
+      |         | git config -lz --includes --local                               |
+      |         | git stash list                                                  |
     And Git Town prints:
       """
       Ran 24 shell commands
@@ -55,22 +55,22 @@ Feature: compress the commits on a feature branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH  | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |         | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | feature | git reset --hard {{ sha 'commit 3' }}                                                                                                                                                                                                                                                                                                                                   |
-      | (none)  | git rev-list --left-right feature...origin/feature                                                                                                                                                                                                                                                                                                                      |
-      | feature | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
+      | BRANCH  | COMMAND                                            |
+      |         | git version                                        |
+      |         | git rev-parse --show-toplevel                      |
+      |         | git config -lz --includes --global                 |
+      |         | git config -lz --includes --local                  |
+      |         | git status -z --ignore-submodules                  |
+      |         | git rev-parse --verify -q MERGE_HEAD               |
+      |         | git rev-parse --absolute-git-dir                   |
+      |         | git stash list                                     |
+      |         | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |         | git remote get-url origin                          |
+      |         | git rev-parse --verify --abbrev-ref @{-1}          |
+      |         | git remote get-url origin                          |
+      |         | git rev-parse HEAD                                 |
+      | feature | git reset --hard {{ sha 'commit 3' }}              |
+      | (none)  | git rev-list --left-right feature...origin/feature |
+      | feature | git push --force-with-lease --force-if-includes    |
     And the initial commits exist now
     And the initial branches and lineage exist now
diff --git a/features/contribute/give_no_branch/verbose/verbose.feature b/features/contribute/give_no_branch/verbose/verbose.feature
index 7f03365de..d459570ab 100644
--- a/features/contribute/give_no_branch/verbose/verbose.feature
+++ b/features/contribute/give_no_branch/verbose/verbose.feature
@@ -10,16 +10,16 @@ Feature: make the current branch a contribution branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config git-town-branch.feature.branchtype contribution                                                                                                                                                                                                                                                                                                              |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
+      | BRANCH | COMMAND                                                    |
+      |        | git version                                                |
+      |        | git rev-parse --show-toplevel                              |
+      |        | git config -lz --includes --global                         |
+      |        | git config -lz --includes --local                          |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname           |
+      |        | git config git-town-branch.feature.branchtype contribution |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname           |
+      |        | git config -lz --includes --global                         |
+      |        | git config -lz --includes --local                          |
     And Git Town prints:
       """
       Ran 9 shell commands
@@ -33,20 +33,20 @@ Feature: make the current branch a contribution branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git config --unset git-town-branch.feature.branchtype                                                                                                                                                                                                                                                                                                                   |
+      | BRANCH | COMMAND                                               |
+      |        | git version                                           |
+      |        | git rev-parse --show-toplevel                         |
+      |        | git config -lz --includes --global                    |
+      |        | git config -lz --includes --local                     |
+      |        | git status -z --ignore-submodules                     |
+      |        | git rev-parse --verify -q MERGE_HEAD                  |
+      |        | git rev-parse --absolute-git-dir                      |
+      |        | git stash list                                        |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname      |
+      |        | git remote get-url origin                             |
+      |        | git rev-parse --verify --abbrev-ref @{-1}             |
+      |        | git remote get-url origin                             |
+      |        | git config --unset git-town-branch.feature.branchtype |
     And Git Town prints:
       """
       Ran 13 shell commands
diff --git a/features/delete/verbose/verbose.feature b/features/delete/verbose/verbose.feature
index 1fd38c752..5bab46fb0 100644
--- a/features/delete/verbose/verbose.feature
+++ b/features/delete/verbose/verbose.feature
@@ -16,30 +16,30 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |         | backend  | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | current | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      | current | frontend | git push origin :current                                                                                                                                                                                                                                                                                                                                                |
-      |         | frontend | git checkout other                                                                                                                                                                                                                                                                                                                                                      |
-      | other   | frontend | git branch -D current                                                                                                                                                                                                                                                                                                                                                   |
-      |         | backend  | git config --unset git-town-branch.current.parent                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q refs/heads/current                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | TYPE     | COMMAND                                           |
+      |         | backend  | git version                                       |
+      |         | backend  | git rev-parse --show-toplevel                     |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git status -z --ignore-submodules                 |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD              |
+      |         | backend  | git rev-parse --absolute-git-dir                  |
+      |         | backend  | git remote                                        |
+      |         | backend  | git branch --show-current                         |
+      | current | frontend | git fetch --prune --tags                          |
+      |         | backend  | git stash list                                    |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git remote get-url origin                         |
+      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}         |
+      | current | frontend | git push origin :current                          |
+      |         | frontend | git checkout other                                |
+      | other   | frontend | git branch -D current                             |
+      |         | backend  | git config --unset git-town-branch.current.parent |
+      |         | backend  | git rev-parse --verify -q refs/heads/current      |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git stash list                                    |
     And Git Town prints:
       """
       Ran 23 shell commands.
diff --git a/features/detach/verbose/enabled.feature b/features/detach/verbose/enabled.feature
index 22f2a91b3..20b2c4cc1 100644
--- a/features/detach/verbose/enabled.feature
+++ b/features/detach/verbose/enabled.feature
@@ -35,43 +35,43 @@ Feature: detaching an omni-branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH   | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |          | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | branch-2 | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      | (none)   | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | git log --merges --format=%H branch-1..branch-2                                                                                                                                                                                                                                                                                                                         |
-      | branch-2 | git -c rebase.updateRefs=false rebase --onto main branch-1                                                                                                                                                                                                                                                                                                              |
-      | (none)   | git rev-list --left-right branch-2...origin/branch-2                                                                                                                                                                                                                                                                                                                    |
-      | branch-2 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-3                                                                                                                                                                                                                                                                                                                                                   |
-      | branch-3 | git pull                                                                                                                                                                                                                                                                                                                                                                |
-      |          | git -c rebase.updateRefs=false rebase --onto branch-1 branch-2                                                                                                                                                                                                                                                                                                          |
-      |          | git push --force-with-lease                                                                                                                                                                                                                                                                                                                                             |
-      | (none)   | git rev-list --left-right branch-3...origin/branch-3                                                                                                                                                                                                                                                                                                                    |
-      | branch-3 | git checkout branch-4                                                                                                                                                                                                                                                                                                                                                   |
-      | branch-4 | git pull                                                                                                                                                                                                                                                                                                                                                                |
-      |          | git -c rebase.updateRefs=false rebase --onto branch-3 branch-2                                                                                                                                                                                                                                                                                                          |
-      |          | git push --force-with-lease                                                                                                                                                                                                                                                                                                                                             |
-      | (none)   | git rev-list --left-right branch-4...origin/branch-4                                                                                                                                                                                                                                                                                                                    |
-      | branch-4 | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git config git-town-branch.branch-2.parent main                                                                                                                                                                                                                                                                                                                         |
-      |          | git config git-town-branch.branch-3.parent branch-1                                                                                                                                                                                                                                                                                                                     |
-      |          | git rev-parse --verify -q refs/heads/branch-4                                                                                                                                                                                                                                                                                                                           |
-      |          | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH   | COMMAND                                                        |
+      |          | git version                                                    |
+      |          | git rev-parse --show-toplevel                                  |
+      |          | git config -lz --includes --global                             |
+      |          | git config -lz --includes --local                              |
+      |          | git status -z --ignore-submodules                              |
+      |          | git rev-parse --verify -q MERGE_HEAD                           |
+      |          | git rev-parse --absolute-git-dir                               |
+      |          | git remote                                                     |
+      |          | git branch --show-current                                      |
+      | branch-2 | git fetch --prune --tags                                       |
+      | (none)   | git stash list                                                 |
+      |          | git -c core.abbrev=40 branch -vva --sort=refname               |
+      |          | git remote get-url origin                                      |
+      |          | git rev-parse --verify --abbrev-ref @{-1}                      |
+      |          | git log --merges --format=%H branch-1..branch-2                |
+      | branch-2 | git -c rebase.updateRefs=false rebase --onto main branch-1     |
+      | (none)   | git rev-list --left-right branch-2...origin/branch-2           |
+      | branch-2 | git push --force-with-lease --force-if-includes                |
+      |          | git checkout branch-3                                          |
+      | branch-3 | git pull                                                       |
+      |          | git -c rebase.updateRefs=false rebase --onto branch-1 branch-2 |
+      |          | git push --force-with-lease                                    |
+      | (none)   | git rev-list --left-right branch-3...origin/branch-3           |
+      | branch-3 | git checkout branch-4                                          |
+      | branch-4 | git pull                                                       |
+      |          | git -c rebase.updateRefs=false rebase --onto branch-3 branch-2 |
+      |          | git push --force-with-lease                                    |
+      | (none)   | git rev-list --left-right branch-4...origin/branch-4           |
+      | branch-4 | git checkout branch-2                                          |
+      | (none)   | git config git-town-branch.branch-2.parent main                |
+      |          | git config git-town-branch.branch-3.parent branch-1            |
+      |          | git rev-parse --verify -q refs/heads/branch-4                  |
+      |          | git -c core.abbrev=40 branch -vva --sort=refname               |
+      |          | git config -lz --includes --global                             |
+      |          | git config -lz --includes --local                              |
+      |          | git stash list                                                 |
     And Git Town prints:
       """
       Ran 36 shell commands.
@@ -96,36 +96,36 @@ Feature: detaching an omni-branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH   | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | branch-2 | git reset --hard {{ sha 'commit 2b' }}                                                                                                                                                                                                                                                                                                                                  |
-      | (none)   | git rev-list --left-right branch-2...origin/branch-2                                                                                                                                                                                                                                                                                                                    |
-      | branch-2 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-3                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | branch-3 | git reset --hard {{ sha 'commit 3b' }}                                                                                                                                                                                                                                                                                                                                  |
-      | (none)   | git rev-list --left-right branch-3...origin/branch-3                                                                                                                                                                                                                                                                                                                    |
-      | branch-3 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-4                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | branch-4 | git reset --hard {{ sha 'commit 4b' }}                                                                                                                                                                                                                                                                                                                                  |
-      | (none)   | git rev-list --left-right branch-4...origin/branch-4                                                                                                                                                                                                                                                                                                                    |
-      | branch-4 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      | (none)   | git rev-parse --verify -q refs/heads/branch-2                                                                                                                                                                                                                                                                                                                           |
-      | branch-4 | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git config git-town-branch.branch-2.parent branch-1                                                                                                                                                                                                                                                                                                                     |
-      |          | git config git-town-branch.branch-3.parent branch-2                                                                                                                                                                                                                                                                                                                     |
+      | BRANCH   | COMMAND                                              |
+      |          | git version                                          |
+      |          | git rev-parse --show-toplevel                        |
+      |          | git config -lz --includes --global                   |
+      |          | git config -lz --includes --local                    |
+      |          | git status -z --ignore-submodules                    |
+      |          | git rev-parse --verify -q MERGE_HEAD                 |
+      |          | git rev-parse --absolute-git-dir                     |
+      |          | git stash list                                       |
+      |          | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |          | git remote get-url origin                            |
+      |          | git rev-parse --verify --abbrev-ref @{-1}            |
+      |          | git remote get-url origin                            |
+      |          | git rev-parse HEAD                                   |
+      | branch-2 | git reset --hard {{ sha 'commit 2b' }}               |
+      | (none)   | git rev-list --left-right branch-2...origin/branch-2 |
+      | branch-2 | git push --force-with-lease --force-if-includes      |
+      |          | git checkout branch-3                                |
+      | (none)   | git rev-parse HEAD                                   |
+      | branch-3 | git reset --hard {{ sha 'commit 3b' }}               |
+      | (none)   | git rev-list --left-right branch-3...origin/branch-3 |
+      | branch-3 | git push --force-with-lease --force-if-includes      |
+      |          | git checkout branch-4                                |
+      | (none)   | git rev-parse HEAD                                   |
+      | branch-4 | git reset --hard {{ sha 'commit 4b' }}               |
+      | (none)   | git rev-list --left-right branch-4...origin/branch-4 |
+      | branch-4 | git push --force-with-lease --force-if-includes      |
+      | (none)   | git rev-parse --verify -q refs/heads/branch-2        |
+      | branch-4 | git checkout branch-2                                |
+      | (none)   | git config git-town-branch.branch-2.parent branch-1  |
+      |          | git config git-town-branch.branch-3.parent branch-2  |
     And the initial commits exist now
     And the initial lineage exists now
diff --git a/features/diff_parent/verbose/verbose.feature b/features/diff_parent/verbose/verbose.feature
index 153464b1d..861cae154 100644
--- a/features/diff_parent/verbose/verbose.feature
+++ b/features/diff_parent/verbose/verbose.feature
@@ -8,18 +8,18 @@ Feature: display all executed Git commands
     And the current branch is "feature"
     When I run "git-town diff-parent --verbose"
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | feature | frontend | git diff main feature                                                                                                                                                                                                                                                                                                                                                   |
+      | BRANCH  | TYPE     | COMMAND                                          |
+      |         | backend  | git version                                      |
+      |         | backend  | git rev-parse --show-toplevel                    |
+      |         | backend  | git config -lz --includes --global               |
+      |         | backend  | git config -lz --includes --local                |
+      |         | backend  | git status -z --ignore-submodules                |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |         | backend  | git rev-parse --absolute-git-dir                 |
+      |         | backend  | git stash list                                   |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |         | backend  | git remote get-url origin                        |
+      | feature | frontend | git diff main feature                            |
     And Git Town prints:
       """
       Ran 11 shell commands.
diff --git a/features/hack/give_non_existing_branch/on_feature_branch/verbose/verbose.feature b/features/hack/give_non_existing_branch/on_feature_branch/verbose/verbose.feature
index 00898a4e9..b3ef9ea86 100644
--- a/features/hack/give_non_existing_branch/on_feature_branch/verbose/verbose.feature
+++ b/features/hack/give_non_existing_branch/on_feature_branch/verbose/verbose.feature
@@ -10,33 +10,33 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | main   | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | main   | frontend | git -c rebase.updateRefs=false rebase origin/main                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-list --left-right main...origin/main                                                                                                                                                                                                                                                                                                                            |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      | main   | frontend | git checkout -b new                                                                                                                                                                                                                                                                                                                                                     |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git config git-town-branch.new.parent main                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                           |
+      |        | backend  | git version                                       |
+      |        | backend  | git rev-parse --show-toplevel                     |
+      |        | backend  | git config -lz --includes --global                |
+      |        | backend  | git config -lz --includes --local                 |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}         |
+      |        | backend  | git status -z --ignore-submodules                 |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD              |
+      |        | backend  | git rev-parse --absolute-git-dir                  |
+      |        | backend  | git remote                                        |
+      | main   | frontend | git fetch --prune --tags                          |
+      |        | backend  | git stash list                                    |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |        | backend  | git remote get-url origin                         |
+      | main   | frontend | git -c rebase.updateRefs=false rebase origin/main |
+      |        | backend  | git rev-parse --verify -q refs/heads/main         |
+      |        | backend  | git rev-list --left-right main...origin/main      |
+      |        | backend  | git rev-parse --verify -q refs/heads/main         |
+      | main   | frontend | git checkout -b new                               |
+      |        | backend  | git rev-parse --verify -q refs/heads/main         |
+      |        | backend  | git config git-town-branch.new.parent main        |
+      |        | backend  | git rev-parse --verify -q refs/heads/main         |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |        | backend  | git config -lz --includes --global                |
+      |        | backend  | git config -lz --includes --local                 |
+      |        | backend  | git stash list                                    |
     And Git Town prints:
       """
       Ran 26 shell commands.
@@ -45,24 +45,24 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | new    | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | main   | frontend | git reset --hard {{ sha 'initial commit' }}                                                                                                                                                                                                                                                                                                                             |
-      |        | frontend | git branch -D new                                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git config --unset git-town-branch.new.parent                                                                                                                                                                                                                                                                                                                           |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      | new    | frontend | git checkout main                                |
+      |        | backend  | git rev-parse HEAD                               |
+      | main   | frontend | git reset --hard {{ sha 'initial commit' }}      |
+      |        | frontend | git branch -D new                                |
+      |        | backend  | git config --unset git-town-branch.new.parent    |
     And Git Town prints:
       """
       Ran 17 shell commands.
diff --git a/features/merge/verbose/enabled.feature b/features/merge/verbose/enabled.feature
index 069fd5408..cfcff8183 100644
--- a/features/merge/verbose/enabled.feature
+++ b/features/merge/verbose/enabled.feature
@@ -20,32 +20,32 @@ Feature: merging a branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | beta   | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      | (none) | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | git log alpha..beta --format=%s --reverse                                                                                                                                                                                                                                                                                                                               |
-      |        | git log main..alpha --format=%s --reverse                                                                                                                                                                                                                                                                                                                               |
-      |        | git log --no-merges --format=%H alpha ^beta                                                                                                                                                                                                                                                                                                                             |
-      |        | git config git-town-branch.beta.parent main                                                                                                                                                                                                                                                                                                                             |
-      |        | git config --unset git-town-branch.alpha.parent                                                                                                                                                                                                                                                                                                                         |
-      | beta   | git branch -D alpha                                                                                                                                                                                                                                                                                                                                                     |
-      |        | git push origin :alpha                                                                                                                                                                                                                                                                                                                                                  |
-      | (none) | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | COMMAND                                          |
+      |        | git version                                      |
+      |        | git rev-parse --show-toplevel                    |
+      |        | git config -lz --includes --global               |
+      |        | git config -lz --includes --local                |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | git status -z --ignore-submodules                |
+      |        | git rev-parse --verify -q MERGE_HEAD             |
+      |        | git rev-parse --absolute-git-dir                 |
+      |        | git remote                                       |
+      | beta   | git fetch --prune --tags                         |
+      | (none) | git stash list                                   |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | git remote get-url origin                        |
+      |        | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | git log alpha..beta --format=%s --reverse        |
+      |        | git log main..alpha --format=%s --reverse        |
+      |        | git log --no-merges --format=%H alpha ^beta      |
+      |        | git config git-town-branch.beta.parent main      |
+      |        | git config --unset git-town-branch.alpha.parent  |
+      | beta   | git branch -D alpha                              |
+      |        | git push origin :alpha                           |
+      | (none) | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | git config -lz --includes --global               |
+      |        | git config -lz --includes --local                |
+      |        | git stash list                                   |
     And Git Town prints:
       """
       Ran 25 shell commands.
@@ -54,22 +54,22 @@ Feature: merging a branch verbosely
   Scenario: undo
     When I run "git-town undo -v"
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | beta   | git branch alpha {{ sha 'alpha commit' }}                                                                                                                                                                                                                                                                                                                               |
-      |        | git push -u origin alpha                                                                                                                                                                                                                                                                                                                                                |
-      | (none) | git config git-town-branch.alpha.parent main                                                                                                                                                                                                                                                                                                                            |
-      |        | git config git-town-branch.beta.parent alpha                                                                                                                                                                                                                                                                                                                            |
+      | BRANCH | COMMAND                                          |
+      |        | git version                                      |
+      |        | git rev-parse --show-toplevel                    |
+      |        | git config -lz --includes --global               |
+      |        | git config -lz --includes --local                |
+      |        | git status -z --ignore-submodules                |
+      |        | git rev-parse --verify -q MERGE_HEAD             |
+      |        | git rev-parse --absolute-git-dir                 |
+      |        | git stash list                                   |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | git remote get-url origin                        |
+      |        | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | git remote get-url origin                        |
+      | beta   | git branch alpha {{ sha 'alpha commit' }}        |
+      |        | git push -u origin alpha                         |
+      | (none) | git config git-town-branch.alpha.parent main     |
+      |        | git config git-town-branch.beta.parent alpha     |
     And the initial commits exist now
     And the initial lineage exists now
diff --git a/features/observe/give_no_branch/verbose/verbose.feature b/features/observe/give_no_branch/verbose/verbose.feature
index 1d585bbf3..a481a6982 100644
--- a/features/observe/give_no_branch/verbose/verbose.feature
+++ b/features/observe/give_no_branch/verbose/verbose.feature
@@ -10,16 +10,16 @@ Feature: observe the current branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config git-town-branch.feature.branchtype observed                                                                                                                                                                                                                                                                                                                  |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
+      | BRANCH | COMMAND                                                |
+      |        | git version                                            |
+      |        | git rev-parse --show-toplevel                          |
+      |        | git config -lz --includes --global                     |
+      |        | git config -lz --includes --local                      |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname       |
+      |        | git config git-town-branch.feature.branchtype observed |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname       |
+      |        | git config -lz --includes --global                     |
+      |        | git config -lz --includes --local                      |
     And Git Town prints:
       """
       Ran 9 shell commands
@@ -33,20 +33,20 @@ Feature: observe the current branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git config --unset git-town-branch.feature.branchtype                                                                                                                                                                                                                                                                                                                   |
+      | BRANCH | COMMAND                                               |
+      |        | git version                                           |
+      |        | git rev-parse --show-toplevel                         |
+      |        | git config -lz --includes --global                    |
+      |        | git config -lz --includes --local                     |
+      |        | git status -z --ignore-submodules                     |
+      |        | git rev-parse --verify -q MERGE_HEAD                  |
+      |        | git rev-parse --absolute-git-dir                      |
+      |        | git stash list                                        |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname      |
+      |        | git remote get-url origin                             |
+      |        | git rev-parse --verify --abbrev-ref @{-1}             |
+      |        | git remote get-url origin                             |
+      |        | git config --unset git-town-branch.feature.branchtype |
     And Git Town prints:
       """
       Ran 13 shell commands
diff --git a/features/park/give_no_branch/verbose/verbose.feature b/features/park/give_no_branch/verbose/verbose.feature
index d313bd96d..5bd150371 100644
--- a/features/park/give_no_branch/verbose/verbose.feature
+++ b/features/park/give_no_branch/verbose/verbose.feature
@@ -10,16 +10,16 @@ Feature: park the current branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config git-town-branch.feature.branchtype parked                                                                                                                                                                                                                                                                                                                    |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
+      | BRANCH | COMMAND                                              |
+      |        | git version                                          |
+      |        | git rev-parse --show-toplevel                        |
+      |        | git config -lz --includes --global                   |
+      |        | git config -lz --includes --local                    |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |        | git config git-town-branch.feature.branchtype parked |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |        | git config -lz --includes --global                   |
+      |        | git config -lz --includes --local                    |
     And Git Town prints:
       """
       Ran 9 shell commands
@@ -33,20 +33,20 @@ Feature: park the current branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git config --unset git-town-branch.feature.branchtype                                                                                                                                                                                                                                                                                                                   |
+      | BRANCH | COMMAND                                               |
+      |        | git version                                           |
+      |        | git rev-parse --show-toplevel                         |
+      |        | git config -lz --includes --global                    |
+      |        | git config -lz --includes --local                     |
+      |        | git status -z --ignore-submodules                     |
+      |        | git rev-parse --verify -q MERGE_HEAD                  |
+      |        | git rev-parse --absolute-git-dir                      |
+      |        | git stash list                                        |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname      |
+      |        | git remote get-url origin                             |
+      |        | git rev-parse --verify --abbrev-ref @{-1}             |
+      |        | git remote get-url origin                             |
+      |        | git config --unset git-town-branch.feature.branchtype |
     And Git Town prints:
       """
       Ran 13 shell commands
diff --git a/features/prepend/verbose/enabled.feature b/features/prepend/verbose/enabled.feature
index 8bdc9cf0f..b73d131cf 100644
--- a/features/prepend/verbose/enabled.feature
+++ b/features/prepend/verbose/enabled.feature
@@ -13,37 +13,37 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | old    | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git log main..old --format=%s --reverse                                                                                                                                                                                                                                                                                                                                 |
-      | old    | frontend | git merge --no-edit --ff main                                                                                                                                                                                                                                                                                                                                           |
-      |        | frontend | git merge --no-edit --ff origin/old                                                                                                                                                                                                                                                                                                                                     |
-      |        | backend  | git rev-parse --verify -q refs/heads/old                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git rev-list --left-right old...origin/old                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      | old    | frontend | git checkout -b parent main                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git config git-town-branch.parent.parent main                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git rev-parse --verify -q refs/heads/old                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git config git-town-branch.old.parent parent                                                                                                                                                                                                                                                                                                                            |
-      |        | backend  | git rev-parse --verify -q refs/heads/old                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git remote                                       |
+      | old    | frontend | git fetch --prune --tags                         |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git log main..old --format=%s --reverse          |
+      | old    | frontend | git merge --no-edit --ff main                    |
+      |        | frontend | git merge --no-edit --ff origin/old              |
+      |        | backend  | git rev-parse --verify -q refs/heads/old         |
+      |        | backend  | git rev-list --left-right old...origin/old       |
+      |        | backend  | git rev-parse --verify -q refs/heads/main        |
+      | old    | frontend | git checkout -b parent main                      |
+      |        | backend  | git rev-parse --verify -q refs/heads/main        |
+      |        | backend  | git config git-town-branch.parent.parent main    |
+      |        | backend  | git rev-parse --verify -q refs/heads/old         |
+      |        | backend  | git config git-town-branch.old.parent parent     |
+      |        | backend  | git rev-parse --verify -q refs/heads/old         |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git stash list                                   |
     And Git Town prints:
       """
       Ran 30 shell commands.
@@ -52,23 +52,23 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | parent | frontend | git checkout old                                                                                                                                                                                                                                                                                                                                                        |
-      | old    | frontend | git branch -D parent                                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git config --unset git-town-branch.parent.parent                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git config git-town-branch.old.parent main                                                                                                                                                                                                                                                                                                                              |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      | parent | frontend | git checkout old                                 |
+      | old    | frontend | git branch -D parent                             |
+      |        | backend  | git config --unset git-town-branch.parent.parent |
+      |        | backend  | git config git-town-branch.old.parent main       |
     And Git Town prints:
       """
       Ran 16 shell commands.
diff --git a/features/propose/verbose/enabled.feature b/features/propose/verbose/enabled.feature
index 1134731e9..80288d887 100644
--- a/features/propose/verbose/enabled.feature
+++ b/features/propose/verbose/enabled.feature
@@ -12,39 +12,39 @@ Feature: display all executed Git commands
     And a proposal for this branch does not exist
     When I run "git-town propose --verbose"
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | feature | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      | (none)  | frontend | Looking for proposal online ... ok                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git log main..feature --format=%s --reverse                                                                                                                                                                                                                                                                                                                             |
-      | feature | frontend | git merge --no-edit --ff main                                                                                                                                                                                                                                                                                                                                           |
-      |         | frontend | git merge --no-edit --ff origin/feature                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git rev-list --left-right feature...origin/feature                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git rev-parse --abbrev-ref --symbolic-full-name @{u}                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git checkout feature                                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | which wsl-open                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | which garcon-url-handler                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | which xdg-open                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | which open                                                                                                                                                                                                                                                                                                                                                              |
-      | (none)  | frontend | open https://github.com/git-town/git-town/compare/feature?expand=1                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | TYPE     | COMMAND                                                            |
+      |         | backend  | git version                                                        |
+      |         | backend  | git rev-parse --show-toplevel                                      |
+      |         | backend  | git config -lz --includes --global                                 |
+      |         | backend  | git config -lz --includes --local                                  |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname                   |
+      |         | backend  | git status -z --ignore-submodules                                  |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD                               |
+      |         | backend  | git rev-parse --absolute-git-dir                                   |
+      |         | backend  | git remote                                                         |
+      | feature | frontend | git fetch --prune --tags                                           |
+      |         | backend  | git stash list                                                     |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname                   |
+      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                          |
+      | (none)  | frontend | Looking for proposal online ... ok                                 |
+      |         | backend  | git log main..feature --format=%s --reverse                        |
+      | feature | frontend | git merge --no-edit --ff main                                      |
+      |         | frontend | git merge --no-edit --ff origin/feature                            |
+      |         | backend  | git rev-parse --verify -q refs/heads/feature                       |
+      |         | backend  | git rev-list --left-right feature...origin/feature                 |
+      |         | backend  | git rev-parse --abbrev-ref --symbolic-full-name @{u}               |
+      |         | backend  | git rev-parse --verify -q refs/heads/main                          |
+      |         | backend  | git checkout main                                                  |
+      |         | backend  | git checkout feature                                               |
+      |         | backend  | which wsl-open                                                     |
+      |         | backend  | which garcon-url-handler                                           |
+      |         | backend  | which xdg-open                                                     |
+      |         | backend  | which open                                                         |
+      | (none)  | frontend | open https://github.com/git-town/git-town/compare/feature?expand=1 |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname                   |
+      |         | backend  | git config -lz --includes --global                                 |
+      |         | backend  | git config -lz --includes --local                                  |
+      |         | backend  | git stash list                                                     |
     And Git Town prints:
       """
       Ran 31 shell commands.
diff --git a/features/prototype/give_no_branch/verbose/verbose.feature b/features/prototype/give_no_branch/verbose/verbose.feature
index 185fe4597..2386444db 100644
--- a/features/prototype/give_no_branch/verbose/verbose.feature
+++ b/features/prototype/give_no_branch/verbose/verbose.feature
@@ -10,16 +10,16 @@ Feature: prototype the current branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config git-town-branch.feature.branchtype prototype                                                                                                                                                                                                                                                                                                                 |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
+      | BRANCH | COMMAND                                                 |
+      |        | git version                                             |
+      |        | git rev-parse --show-toplevel                           |
+      |        | git config -lz --includes --global                      |
+      |        | git config -lz --includes --local                       |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname        |
+      |        | git config git-town-branch.feature.branchtype prototype |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname        |
+      |        | git config -lz --includes --global                      |
+      |        | git config -lz --includes --local                       |
     And Git Town prints:
       """
       Ran 9 shell commands
@@ -33,20 +33,20 @@ Feature: prototype the current branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | git config --unset git-town-branch.feature.branchtype                                                                                                                                                                                                                                                                                                                   |
+      | BRANCH | COMMAND                                               |
+      |        | git version                                           |
+      |        | git rev-parse --show-toplevel                         |
+      |        | git config -lz --includes --global                    |
+      |        | git config -lz --includes --local                     |
+      |        | git status -z --ignore-submodules                     |
+      |        | git rev-parse --verify -q MERGE_HEAD                  |
+      |        | git rev-parse --absolute-git-dir                      |
+      |        | git stash list                                        |
+      |        | git -c core.abbrev=40 branch -vva --sort=refname      |
+      |        | git remote get-url origin                             |
+      |        | git rev-parse --verify --abbrev-ref @{-1}             |
+      |        | git remote get-url origin                             |
+      |        | git config --unset git-town-branch.feature.branchtype |
     And Git Town prints:
       """
       Ran 13 shell commands
diff --git a/features/rename/offline/enabled.feature b/features/rename/offline/enabled.feature
index ab8057b6c..cd414352c 100644
--- a/features/rename/offline/enabled.feature
+++ b/features/rename/offline/enabled.feature
@@ -30,8 +30,9 @@ Feature: offline mode
   Scenario: undo
     When I run "git-town undo"
     Then Git Town runs the commands
-      | BRANCH | COMMAND                   |
-      | new    | git branch --move new old |
-      |        | git checkout old          |
+      | BRANCH | COMMAND                               |
+      | new    | git branch old {{ sha 'old commit' }} |
+      |        | git checkout old                      |
+      | old    | git branch -D new                     |
     And the initial commits exist now
     And the initial branches and lineage exist now
diff --git a/features/rename/verbose/verbose.feature b/features/rename/verbose/verbose.feature
index f98e7f404..992bdde30 100644
--- a/features/rename/verbose/verbose.feature
+++ b/features/rename/verbose/verbose.feature
@@ -14,32 +14,32 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | old    | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | old    | frontend | git branch --move old new                                                                                                                                                                                                                                                                                                                                               |
-      |        | frontend | git checkout new                                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git config git-town-branch.new.parent main                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git config --unset git-town-branch.old.parent                                                                                                                                                                                                                                                                                                                           |
-      | new    | frontend | git push -u origin new                                                                                                                                                                                                                                                                                                                                                  |
-      |        | frontend | git push origin :old                                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --verify -q refs/heads/old                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git remote                                       |
+      |        | backend  | git branch --show-current                        |
+      | old    | frontend | git fetch --prune --tags                         |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      | old    | frontend | git branch --move old new                        |
+      |        | frontend | git checkout new                                 |
+      |        | backend  | git config git-town-branch.new.parent main       |
+      |        | backend  | git config --unset git-town-branch.old.parent    |
+      | new    | frontend | git push -u origin new                           |
+      |        | frontend | git push origin :old                             |
+      |        | backend  | git rev-parse --verify -q refs/heads/old         |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git stash list                                   |
     And Git Town prints:
       """
       Ran 25 shell commands.
@@ -48,26 +48,26 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | new    | frontend | git branch old {{ sha 'old commit' }}                                                                                                                                                                                                                                                                                                                                   |
-      |        | frontend | git push -u origin old                                                                                                                                                                                                                                                                                                                                                  |
-      |        | frontend | git checkout old                                                                                                                                                                                                                                                                                                                                                        |
-      | old    | frontend | git branch -D new                                                                                                                                                                                                                                                                                                                                                       |
-      |        | frontend | git push origin :new                                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git config --unset git-town-branch.new.parent                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config git-town-branch.old.parent main                                                                                                                                                                                                                                                                                                                              |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      | new    | frontend | git branch old {{ sha 'old commit' }}            |
+      |        | frontend | git push -u origin old                           |
+      |        | frontend | git checkout old                                 |
+      | old    | frontend | git branch -D new                                |
+      |        | frontend | git push origin :new                             |
+      |        | backend  | git config --unset git-town-branch.new.parent    |
+      |        | backend  | git config git-town-branch.old.parent main       |
     And Git Town prints:
       """
       Ran 19 shell commands.
diff --git a/features/set_parent/verbose/enabled.feature b/features/set_parent/verbose/enabled.feature
index db9611352..ec51d814d 100644
--- a/features/set_parent/verbose/enabled.feature
+++ b/features/set_parent/verbose/enabled.feature
@@ -11,22 +11,22 @@ Feature: display all executed Git commands
 
   Scenario: result
     And Git Town runs the commands
-      | BRANCH | TYPE    | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend | git config git-town-branch.child.parent main                                                                                                                                                                                                                                                                                                                            |
-      |        | backend | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE    | COMMAND                                          |
+      |        | backend | git version                                      |
+      |        | backend | git rev-parse --show-toplevel                    |
+      |        | backend | git config -lz --includes --global               |
+      |        | backend | git config -lz --includes --local                |
+      |        | backend | git status -z --ignore-submodules                |
+      |        | backend | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend | git rev-parse --absolute-git-dir                 |
+      |        | backend | git stash list                                   |
+      |        | backend | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend | git remote get-url origin                        |
+      |        | backend | git config git-town-branch.child.parent main     |
+      |        | backend | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend | git config -lz --includes --global               |
+      |        | backend | git config -lz --includes --local                |
+      |        | backend | git stash list                                   |
     And Git Town prints:
       """
       Ran 15 shell commands.
@@ -39,20 +39,20 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE    | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend | git config git-town-branch.child.parent parent                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE    | COMMAND                                          |
+      |        | backend | git version                                      |
+      |        | backend | git rev-parse --show-toplevel                    |
+      |        | backend | git config -lz --includes --global               |
+      |        | backend | git config -lz --includes --local                |
+      |        | backend | git status -z --ignore-submodules                |
+      |        | backend | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend | git rev-parse --absolute-git-dir                 |
+      |        | backend | git stash list                                   |
+      |        | backend | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend | git remote get-url origin                        |
+      |        | backend | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend | git remote get-url origin                        |
+      |        | backend | git config git-town-branch.child.parent parent   |
     And Git Town prints:
       """
       Ran 13 shell commands.
diff --git a/features/ship/always_merge/current_branch/verbose/verbose.feature b/features/ship/always_merge/current_branch/verbose/verbose.feature
index 4f15d6034..507cf572d 100644
--- a/features/ship/always_merge/current_branch/verbose/verbose.feature
+++ b/features/ship/always_merge/current_branch/verbose/verbose.feature
@@ -14,36 +14,36 @@ Feature: display all executed Git commands when using the always-merge strategy
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |         | backend  | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | feature | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git shortlog -s -n -e main..feature                                                                                                                                                                                                                                                                                                                                     |
-      |         | backend  | git diff --shortstat main feature                                                                                                                                                                                                                                                                                                                                       |
-      | feature | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git merge --no-ff --edit -- feature                                                                                                                                                                                                                                                                                                                                     |
-      |         | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git rev-list --left-right main...origin/main                                                                                                                                                                                                                                                                                                                            |
-      | main    | frontend | git push                                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git config --unset git-town-branch.feature.parent                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git push origin :feature                                                                                                                                                                                                                                                                                                                                                |
-      |         | frontend | git branch -D feature                                                                                                                                                                                                                                                                                                                                                   |
-      |         | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | TYPE     | COMMAND                                           |
+      |         | backend  | git version                                       |
+      |         | backend  | git rev-parse --show-toplevel                     |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git status -z --ignore-submodules                 |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD              |
+      |         | backend  | git rev-parse --absolute-git-dir                  |
+      |         | backend  | git remote                                        |
+      |         | backend  | git branch --show-current                         |
+      | feature | frontend | git fetch --prune --tags                          |
+      |         | backend  | git stash list                                    |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}         |
+      |         | backend  | git remote get-url origin                         |
+      |         | backend  | git shortlog -s -n -e main..feature               |
+      |         | backend  | git diff --shortstat main feature                 |
+      | feature | frontend | git checkout main                                 |
+      | main    | frontend | git merge --no-ff --edit -- feature               |
+      |         | backend  | git rev-parse --verify -q refs/heads/main         |
+      |         | backend  | git rev-list --left-right main...origin/main      |
+      | main    | frontend | git push                                          |
+      |         | backend  | git config --unset git-town-branch.feature.parent |
+      | main    | frontend | git push origin :feature                          |
+      |         | frontend | git branch -D feature                             |
+      |         | backend  | git rev-parse --verify -q refs/heads/feature      |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git stash list                                    |
     And Git Town prints:
       """
       Ran 29 shell commands.
@@ -52,24 +52,24 @@ Feature: display all executed Git commands when using the always-merge strategy
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | main   | frontend | git branch feature {{ sha 'feature commit' }}                                                                                                                                                                                                                                                                                                                           |
-      |        | frontend | git push -u origin feature                                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      | main   | frontend | git checkout feature                                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git config git-town-branch.feature.parent main                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      | main   | frontend | git branch feature {{ sha 'feature commit' }}    |
+      |        | frontend | git push -u origin feature                       |
+      |        | backend  | git rev-parse --verify -q refs/heads/feature     |
+      | main   | frontend | git checkout feature                             |
+      |        | backend  | git config git-town-branch.feature.parent main   |
     And Git Town prints:
       """
       Ran 17 shell commands.
diff --git a/features/ship/fast_forward/current_branch/verbose/enabled.feature b/features/ship/fast_forward/current_branch/verbose/enabled.feature
index c9642270e..7f03b0453 100644
--- a/features/ship/fast_forward/current_branch/verbose/enabled.feature
+++ b/features/ship/fast_forward/current_branch/verbose/enabled.feature
@@ -14,36 +14,36 @@ Feature: display all executed Git commands when using the fast-forward strategy
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |         | backend  | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | feature | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git shortlog -s -n -e main..feature                                                                                                                                                                                                                                                                                                                                     |
-      |         | backend  | git diff --shortstat main feature                                                                                                                                                                                                                                                                                                                                       |
-      | feature | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git merge --ff-only feature                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git rev-list --left-right main...origin/main                                                                                                                                                                                                                                                                                                                            |
-      | main    | frontend | git push                                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git config --unset git-town-branch.feature.parent                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git push origin :feature                                                                                                                                                                                                                                                                                                                                                |
-      |         | frontend | git branch -D feature                                                                                                                                                                                                                                                                                                                                                   |
-      |         | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | TYPE     | COMMAND                                           |
+      |         | backend  | git version                                       |
+      |         | backend  | git rev-parse --show-toplevel                     |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git status -z --ignore-submodules                 |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD              |
+      |         | backend  | git rev-parse --absolute-git-dir                  |
+      |         | backend  | git remote                                        |
+      |         | backend  | git branch --show-current                         |
+      | feature | frontend | git fetch --prune --tags                          |
+      |         | backend  | git stash list                                    |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}         |
+      |         | backend  | git remote get-url origin                         |
+      |         | backend  | git shortlog -s -n -e main..feature               |
+      |         | backend  | git diff --shortstat main feature                 |
+      | feature | frontend | git checkout main                                 |
+      | main    | frontend | git merge --ff-only feature                       |
+      |         | backend  | git rev-parse --verify -q refs/heads/main         |
+      |         | backend  | git rev-list --left-right main...origin/main      |
+      | main    | frontend | git push                                          |
+      |         | backend  | git config --unset git-town-branch.feature.parent |
+      | main    | frontend | git push origin :feature                          |
+      |         | frontend | git branch -D feature                             |
+      |         | backend  | git rev-parse --verify -q refs/heads/feature      |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git stash list                                    |
     And Git Town prints:
       """
       Ran 29 shell commands.
@@ -52,24 +52,24 @@ Feature: display all executed Git commands when using the fast-forward strategy
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | main   | frontend | git branch feature {{ sha 'feature commit' }}                                                                                                                                                                                                                                                                                                                           |
-      |        | frontend | git push -u origin feature                                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      | main   | frontend | git checkout feature                                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git config git-town-branch.feature.parent main                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      | main   | frontend | git branch feature {{ sha 'feature commit' }}    |
+      |        | frontend | git push -u origin feature                       |
+      |        | backend  | git rev-parse --verify -q refs/heads/feature     |
+      | main   | frontend | git checkout feature                             |
+      |        | backend  | git config git-town-branch.feature.parent main   |
     And Git Town prints:
       """
       Ran 17 shell commands.
diff --git a/features/ship/squash_merge/current_branch/verbose/verbose.feature b/features/ship/squash_merge/current_branch/verbose/verbose.feature
index 64b0a9648..c5b73e59c 100644
--- a/features/ship/squash_merge/current_branch/verbose/verbose.feature
+++ b/features/ship/squash_merge/current_branch/verbose/verbose.feature
@@ -14,38 +14,38 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |         | backend  | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | feature | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git shortlog -s -n -e main..feature                                                                                                                                                                                                                                                                                                                                     |
-      |         | backend  | git diff --shortstat main feature                                                                                                                                                                                                                                                                                                                                       |
-      | feature | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git merge --squash --ff feature                                                                                                                                                                                                                                                                                                                                         |
-      |         | frontend | git commit -m done                                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git rev-parse main                                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git rev-list --left-right main...origin/main                                                                                                                                                                                                                                                                                                                            |
-      | main    | frontend | git push                                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git config --unset git-town-branch.feature.parent                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git push origin :feature                                                                                                                                                                                                                                                                                                                                                |
-      |         | frontend | git branch -D feature                                                                                                                                                                                                                                                                                                                                                   |
-      |         | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | TYPE     | COMMAND                                           |
+      |         | backend  | git version                                       |
+      |         | backend  | git rev-parse --show-toplevel                     |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git status -z --ignore-submodules                 |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD              |
+      |         | backend  | git rev-parse --absolute-git-dir                  |
+      |         | backend  | git remote                                        |
+      |         | backend  | git branch --show-current                         |
+      | feature | frontend | git fetch --prune --tags                          |
+      |         | backend  | git stash list                                    |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}         |
+      |         | backend  | git remote get-url origin                         |
+      |         | backend  | git shortlog -s -n -e main..feature               |
+      |         | backend  | git diff --shortstat main feature                 |
+      | feature | frontend | git checkout main                                 |
+      | main    | frontend | git merge --squash --ff feature                   |
+      |         | frontend | git commit -m done                                |
+      |         | backend  | git rev-parse main                                |
+      |         | backend  | git rev-parse --verify -q refs/heads/main         |
+      |         | backend  | git rev-list --left-right main...origin/main      |
+      | main    | frontend | git push                                          |
+      |         | backend  | git config --unset git-town-branch.feature.parent |
+      | main    | frontend | git push origin :feature                          |
+      |         | frontend | git branch -D feature                             |
+      |         | backend  | git rev-parse --verify -q refs/heads/feature      |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname  |
+      |         | backend  | git config -lz --includes --global                |
+      |         | backend  | git config -lz --includes --local                 |
+      |         | backend  | git stash list                                    |
     And Git Town prints:
       """
       Ran 31 shell commands.
@@ -54,29 +54,29 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git log --format=%H %s -10                                                                                                                                                                                                                                                                                                                                              |
-      | main   | frontend | git revert {{ sha 'done' }}                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-list --left-right main...origin/main                                                                                                                                                                                                                                                                                                                            |
-      | main   | frontend | git push                                                                                                                                                                                                                                                                                                                                                                |
-      |        | frontend | git branch feature {{ sha 'feature commit' }}                                                                                                                                                                                                                                                                                                                           |
-      |        | frontend | git push -u origin feature                                                                                                                                                                                                                                                                                                                                              |
-      |        | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      | main   | frontend | git checkout feature                                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git config git-town-branch.feature.parent main                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git log --format=%H %s -10                       |
+      | main   | frontend | git revert {{ sha 'done' }}                      |
+      |        | backend  | git rev-parse --verify -q refs/heads/main        |
+      |        | backend  | git rev-list --left-right main...origin/main     |
+      | main   | frontend | git push                                         |
+      |        | frontend | git branch feature {{ sha 'feature commit' }}    |
+      |        | frontend | git push -u origin feature                       |
+      |        | backend  | git rev-parse --verify -q refs/heads/feature     |
+      | main   | frontend | git checkout feature                             |
+      |        | backend  | git config git-town-branch.feature.parent main   |
     And Git Town prints:
       """
       Ran 22 shell commands.
diff --git a/features/swap/verbose/enabled.feature b/features/swap/verbose/enabled.feature
index 5fe126fc9..12a8cb325 100644
--- a/features/swap/verbose/enabled.feature
+++ b/features/swap/verbose/enabled.feature
@@ -18,43 +18,43 @@ Feature: swapping a feature branch verbosely
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH   | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      |          | git branch --show-current                                                                                                                                                                                                                                                                                                                                               |
-      | branch-2 | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      | (none)   | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | git log --merges --format=%H branch-1..branch-2                                                                                                                                                                                                                                                                                                                         |
-      |          | git log --merges --format=%H main..branch-1                                                                                                                                                                                                                                                                                                                             |
-      | branch-2 | git -c rebase.updateRefs=false rebase --onto main branch-1                                                                                                                                                                                                                                                                                                              |
-      | (none)   | git rev-list --left-right branch-2...origin/branch-2                                                                                                                                                                                                                                                                                                                    |
-      | branch-2 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-1                                                                                                                                                                                                                                                                                                                                                   |
-      | branch-1 | git -c rebase.updateRefs=false rebase --onto branch-2 main                                                                                                                                                                                                                                                                                                              |
-      | (none)   | git rev-list --left-right branch-1...origin/branch-1                                                                                                                                                                                                                                                                                                                    |
-      | branch-1 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-3                                                                                                                                                                                                                                                                                                                                                   |
-      | branch-3 | git -c rebase.updateRefs=false rebase --onto branch-1 {{ sha-before-run 'commit 2' }}                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-list --left-right branch-3...origin/branch-3                                                                                                                                                                                                                                                                                                                    |
-      | branch-3 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git config git-town-branch.branch-2.parent main                                                                                                                                                                                                                                                                                                                         |
-      |          | git config git-town-branch.branch-1.parent branch-2                                                                                                                                                                                                                                                                                                                     |
-      |          | git config git-town-branch.branch-3.parent branch-1                                                                                                                                                                                                                                                                                                                     |
-      |          | git rev-parse --verify -q refs/heads/branch-3                                                                                                                                                                                                                                                                                                                           |
-      |          | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH   | COMMAND                                                                               |
+      |          | git version                                                                           |
+      |          | git rev-parse --show-toplevel                                                         |
+      |          | git config -lz --includes --global                                                    |
+      |          | git config -lz --includes --local                                                     |
+      |          | git status -z --ignore-submodules                                                     |
+      |          | git rev-parse --verify -q MERGE_HEAD                                                  |
+      |          | git rev-parse --absolute-git-dir                                                      |
+      |          | git remote                                                                            |
+      |          | git branch --show-current                                                             |
+      | branch-2 | git fetch --prune --tags                                                              |
+      | (none)   | git stash list                                                                        |
+      |          | git -c core.abbrev=40 branch -vva --sort=refname                                      |
+      |          | git remote get-url origin                                                             |
+      |          | git rev-parse --verify --abbrev-ref @{-1}                                             |
+      |          | git log --merges --format=%H branch-1..branch-2                                       |
+      |          | git log --merges --format=%H main..branch-1                                           |
+      | branch-2 | git -c rebase.updateRefs=false rebase --onto main branch-1                            |
+      | (none)   | git rev-list --left-right branch-2...origin/branch-2                                  |
+      | branch-2 | git push --force-with-lease --force-if-includes                                       |
+      |          | git checkout branch-1                                                                 |
+      | branch-1 | git -c rebase.updateRefs=false rebase --onto branch-2 main                            |
+      | (none)   | git rev-list --left-right branch-1...origin/branch-1                                  |
+      | branch-1 | git push --force-with-lease --force-if-includes                                       |
+      |          | git checkout branch-3                                                                 |
+      | branch-3 | git -c rebase.updateRefs=false rebase --onto branch-1 {{ sha-before-run 'commit 2' }} |
+      | (none)   | git rev-list --left-right branch-3...origin/branch-3                                  |
+      | branch-3 | git push --force-with-lease --force-if-includes                                       |
+      |          | git checkout branch-2                                                                 |
+      | (none)   | git config git-town-branch.branch-2.parent main                                       |
+      |          | git config git-town-branch.branch-1.parent branch-2                                   |
+      |          | git config git-town-branch.branch-3.parent branch-1                                   |
+      |          | git rev-parse --verify -q refs/heads/branch-3                                         |
+      |          | git -c core.abbrev=40 branch -vva --sort=refname                                      |
+      |          | git config -lz --includes --global                                                    |
+      |          | git config -lz --includes --local                                                     |
+      |          | git stash list                                                                        |
     And Git Town prints:
       """
       Ran 36 shell commands.
@@ -63,39 +63,39 @@ Feature: swapping a feature branch verbosely
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH   | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | branch-2 | git checkout branch-1                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | branch-1 | git reset --hard {{ sha 'commit 1' }}                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-list --left-right branch-1...origin/branch-1                                                                                                                                                                                                                                                                                                                    |
-      | branch-1 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | branch-2 | git reset --hard {{ sha 'commit 2' }}                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-list --left-right branch-2...origin/branch-2                                                                                                                                                                                                                                                                                                                    |
-      | branch-2 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      |          | git checkout branch-3                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-parse HEAD                                                                                                                                                                                                                                                                                                                                                      |
-      | branch-3 | git reset --hard {{ sha 'commit 3' }}                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git rev-list --left-right branch-3...origin/branch-3                                                                                                                                                                                                                                                                                                                    |
-      | branch-3 | git push --force-with-lease --force-if-includes                                                                                                                                                                                                                                                                                                                         |
-      | (none)   | git rev-parse --verify -q refs/heads/branch-2                                                                                                                                                                                                                                                                                                                           |
-      | branch-3 | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      | (none)   | git config git-town-branch.branch-1.parent main                                                                                                                                                                                                                                                                                                                         |
-      |          | git config git-town-branch.branch-2.parent branch-1                                                                                                                                                                                                                                                                                                                     |
-      |          | git config git-town-branch.branch-3.parent branch-2                                                                                                                                                                                                                                                                                                                     |
+      | BRANCH   | COMMAND                                              |
+      |          | git version                                          |
+      |          | git rev-parse --show-toplevel                        |
+      |          | git config -lz --includes --global                   |
+      |          | git config -lz --includes --local                    |
+      |          | git status -z --ignore-submodules                    |
+      |          | git rev-parse --verify -q MERGE_HEAD                 |
+      |          | git rev-parse --absolute-git-dir                     |
+      |          | git stash list                                       |
+      |          | git -c core.abbrev=40 branch -vva --sort=refname     |
+      |          | git remote get-url origin                            |
+      |          | git rev-parse --verify --abbrev-ref @{-1}            |
+      |          | git remote get-url origin                            |
+      | branch-2 | git checkout branch-1                                |
+      | (none)   | git rev-parse HEAD                                   |
+      | branch-1 | git reset --hard {{ sha 'commit 1' }}                |
+      | (none)   | git rev-list --left-right branch-1...origin/branch-1 |
+      | branch-1 | git push --force-with-lease --force-if-includes      |
+      |          | git checkout branch-2                                |
+      | (none)   | git rev-parse HEAD                                   |
+      | branch-2 | git reset --hard {{ sha 'commit 2' }}                |
+      | (none)   | git rev-list --left-right branch-2...origin/branch-2 |
+      | branch-2 | git push --force-with-lease --force-if-includes      |
+      |          | git checkout branch-3                                |
+      | (none)   | git rev-parse HEAD                                   |
+      | branch-3 | git reset --hard {{ sha 'commit 3' }}                |
+      | (none)   | git rev-list --left-right branch-3...origin/branch-3 |
+      | branch-3 | git push --force-with-lease --force-if-includes      |
+      | (none)   | git rev-parse --verify -q refs/heads/branch-2        |
+      | branch-3 | git checkout branch-2                                |
+      | (none)   | git config git-town-branch.branch-1.parent main      |
+      |          | git config git-town-branch.branch-2.parent branch-1  |
+      |          | git config git-town-branch.branch-3.parent branch-2  |
     And Git Town prints:
       """
       Ran 32 shell commands.
diff --git a/features/sync/current_branch/feature_branch/compress_sync_strategy/verbose/verbose.feature b/features/sync/current_branch/feature_branch/compress_sync_strategy/verbose/verbose.feature
index 9b2e7f740..3a7507597 100644
--- a/features/sync/current_branch/feature_branch/compress_sync_strategy/verbose/verbose.feature
+++ b/features/sync/current_branch/feature_branch/compress_sync_strategy/verbose/verbose.feature
@@ -16,32 +16,32 @@ Feature: display all executed Git commands for the "compress" sync strategy
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH   | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | branch-2 | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git log main..branch-2 --format=%s --reverse                                                                                                                                                                                                                                                                                                                            |
-      | branch-2 | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git config --unset git-town-branch.branch-2.parent                                                                                                                                                                                                                                                                                                                      |
-      | main     | frontend | git branch -D branch-2                                                                                                                                                                                                                                                                                                                                                  |
-      |          | backend  | git rev-parse --verify -q refs/heads/branch-2                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git rev-parse --verify -q refs/heads/branch-1                                                                                                                                                                                                                                                                                                                           |
-      | main     | frontend | git checkout branch-1                                                                                                                                                                                                                                                                                                                                                   |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH   | TYPE     | COMMAND                                            |
+      |          | backend  | git version                                        |
+      |          | backend  | git rev-parse --show-toplevel                      |
+      |          | backend  | git config -lz --includes --global                 |
+      |          | backend  | git config -lz --includes --local                  |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |          | backend  | git status -z --ignore-submodules                  |
+      |          | backend  | git rev-parse --verify -q MERGE_HEAD               |
+      |          | backend  | git rev-parse --absolute-git-dir                   |
+      |          | backend  | git remote                                         |
+      | branch-2 | frontend | git fetch --prune --tags                           |
+      |          | backend  | git stash list                                     |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}          |
+      |          | backend  | git remote get-url origin                          |
+      |          | backend  | git log main..branch-2 --format=%s --reverse       |
+      | branch-2 | frontend | git checkout main                                  |
+      |          | backend  | git config --unset git-town-branch.branch-2.parent |
+      | main     | frontend | git branch -D branch-2                             |
+      |          | backend  | git rev-parse --verify -q refs/heads/branch-2      |
+      |          | backend  | git rev-parse --verify -q refs/heads/branch-1      |
+      | main     | frontend | git checkout branch-1                              |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |          | backend  | git config -lz --includes --global                 |
+      |          | backend  | git config -lz --includes --local                  |
+      |          | backend  | git stash list                                     |
     And Git Town prints:
       """
       Ran 25 shell commands.
@@ -56,23 +56,23 @@ Feature: display all executed Git commands for the "compress" sync strategy
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH   | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | branch-1 | frontend | git branch branch-2 {{ sha 'initial commit' }}                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git rev-parse --verify -q refs/heads/branch-2                                                                                                                                                                                                                                                                                                                           |
-      | branch-1 | frontend | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      |          | backend  | git config git-town-branch.branch-2.parent main                                                                                                                                                                                                                                                                                                                         |
+      | BRANCH   | TYPE     | COMMAND                                          |
+      |          | backend  | git version                                      |
+      |          | backend  | git rev-parse --show-toplevel                    |
+      |          | backend  | git config -lz --includes --global               |
+      |          | backend  | git config -lz --includes --local                |
+      |          | backend  | git status -z --ignore-submodules                |
+      |          | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |          | backend  | git rev-parse --absolute-git-dir                 |
+      |          | backend  | git stash list                                   |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |          | backend  | git remote get-url origin                        |
+      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |          | backend  | git remote get-url origin                        |
+      | branch-1 | frontend | git branch branch-2 {{ sha 'initial commit' }}   |
+      |          | backend  | git rev-parse --verify -q refs/heads/branch-2    |
+      | branch-1 | frontend | git checkout branch-2                            |
+      |          | backend  | git config git-town-branch.branch-2.parent main  |
     And Git Town prints:
       """
       Ran 16 shell commands.
diff --git a/features/sync/current_branch/feature_branch/merge_sync_strategy/tracking_branch/deleted/verbose.feature b/features/sync/current_branch/feature_branch/merge_sync_strategy/tracking_branch/deleted/verbose.feature
index 19b77154e..e82eaf3f0 100644
--- a/features/sync/current_branch/feature_branch/merge_sync_strategy/tracking_branch/deleted/verbose.feature
+++ b/features/sync/current_branch/feature_branch/merge_sync_strategy/tracking_branch/deleted/verbose.feature
@@ -15,32 +15,32 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | old    | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git log main..old --format=%s --reverse                                                                                                                                                                                                                                                                                                                                 |
-      | old    | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git config --unset git-town-branch.old.parent                                                                                                                                                                                                                                                                                                                           |
-      | main   | frontend | git branch -D old                                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q refs/heads/old                                                                                                                                                                                                                                                                                                                                |
-      |        | backend  | git rev-parse --verify -q refs/heads/active                                                                                                                                                                                                                                                                                                                             |
-      | main   | frontend | git checkout active                                                                                                                                                                                                                                                                                                                                                     |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git remote                                       |
+      | old    | frontend | git fetch --prune --tags                         |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git log main..old --format=%s --reverse          |
+      | old    | frontend | git checkout main                                |
+      |        | backend  | git config --unset git-town-branch.old.parent    |
+      | main   | frontend | git branch -D old                                |
+      |        | backend  | git rev-parse --verify -q refs/heads/old         |
+      |        | backend  | git rev-parse --verify -q refs/heads/active      |
+      | main   | frontend | git checkout active                              |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git stash list                                   |
     And Git Town prints:
       """
       Ran 25 shell commands.
@@ -55,23 +55,23 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |        | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |        | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |        | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |        | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |        | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |        | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |        | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | active | frontend | git branch old {{ sha 'initial commit' }}                                                                                                                                                                                                                                                                                                                               |
-      |        | backend  | git rev-parse --verify -q refs/heads/old                                                                                                                                                                                                                                                                                                                                |
-      | active | frontend | git checkout old                                                                                                                                                                                                                                                                                                                                                        |
-      |        | backend  | git config git-town-branch.old.parent main                                                                                                                                                                                                                                                                                                                              |
+      | BRANCH | TYPE     | COMMAND                                          |
+      |        | backend  | git version                                      |
+      |        | backend  | git rev-parse --show-toplevel                    |
+      |        | backend  | git config -lz --includes --global               |
+      |        | backend  | git config -lz --includes --local                |
+      |        | backend  | git status -z --ignore-submodules                |
+      |        | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |        | backend  | git rev-parse --absolute-git-dir                 |
+      |        | backend  | git stash list                                   |
+      |        | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |        | backend  | git remote get-url origin                        |
+      |        | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |        | backend  | git remote get-url origin                        |
+      | active | frontend | git branch old {{ sha 'initial commit' }}        |
+      |        | backend  | git rev-parse --verify -q refs/heads/old         |
+      | active | frontend | git checkout old                                 |
+      |        | backend  | git config git-town-branch.old.parent main       |
     And Git Town prints:
       """
       Ran 16 shell commands.
diff --git a/features/sync/current_branch/feature_branch/rebase_sync_strategy/tracking_branch/deleted/verbose.feature b/features/sync/current_branch/feature_branch/rebase_sync_strategy/tracking_branch/deleted/verbose.feature
index b89be9566..b7bb8bf69 100644
--- a/features/sync/current_branch/feature_branch/rebase_sync_strategy/tracking_branch/deleted/verbose.feature
+++ b/features/sync/current_branch/feature_branch/rebase_sync_strategy/tracking_branch/deleted/verbose.feature
@@ -16,33 +16,33 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH   | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | branch-2 | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git log main..branch-2 --format=%s --reverse                                                                                                                                                                                                                                                                                                                            |
-      | branch-2 | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git config --unset git-town-branch.branch-2.parent                                                                                                                                                                                                                                                                                                                      |
-      | main     | frontend | git -c rebase.updateRefs=false rebase --onto main branch-2                                                                                                                                                                                                                                                                                                              |
-      |          | frontend | git branch -D branch-2                                                                                                                                                                                                                                                                                                                                                  |
-      |          | backend  | git rev-parse --verify -q refs/heads/branch-2                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git rev-parse --verify -q refs/heads/branch-1                                                                                                                                                                                                                                                                                                                           |
-      | main     | frontend | git checkout branch-1                                                                                                                                                                                                                                                                                                                                                   |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH   | TYPE     | COMMAND                                                    |
+      |          | backend  | git version                                                |
+      |          | backend  | git rev-parse --show-toplevel                              |
+      |          | backend  | git config -lz --includes --global                         |
+      |          | backend  | git config -lz --includes --local                          |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname           |
+      |          | backend  | git status -z --ignore-submodules                          |
+      |          | backend  | git rev-parse --verify -q MERGE_HEAD                       |
+      |          | backend  | git rev-parse --absolute-git-dir                           |
+      |          | backend  | git remote                                                 |
+      | branch-2 | frontend | git fetch --prune --tags                                   |
+      |          | backend  | git stash list                                             |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname           |
+      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                  |
+      |          | backend  | git remote get-url origin                                  |
+      |          | backend  | git log main..branch-2 --format=%s --reverse               |
+      | branch-2 | frontend | git checkout main                                          |
+      |          | backend  | git config --unset git-town-branch.branch-2.parent         |
+      | main     | frontend | git -c rebase.updateRefs=false rebase --onto main branch-2 |
+      |          | frontend | git branch -D branch-2                                     |
+      |          | backend  | git rev-parse --verify -q refs/heads/branch-2              |
+      |          | backend  | git rev-parse --verify -q refs/heads/branch-1              |
+      | main     | frontend | git checkout branch-1                                      |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname           |
+      |          | backend  | git config -lz --includes --global                         |
+      |          | backend  | git config -lz --includes --local                          |
+      |          | backend  | git stash list                                             |
     And Git Town prints:
       """
       Ran 26 shell commands.
@@ -57,23 +57,23 @@ Feature: display all executed Git commands
   Scenario: undo
     When I run "git-town undo --verbose"
     Then Git Town runs the commands
-      | BRANCH   | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |          | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |          | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |          | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |          | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |          | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |          | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |          | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |          | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      | branch-1 | frontend | git branch branch-2 {{ sha 'initial commit' }}                                                                                                                                                                                                                                                                                                                          |
-      |          | backend  | git rev-parse --verify -q refs/heads/branch-2                                                                                                                                                                                                                                                                                                                           |
-      | branch-1 | frontend | git checkout branch-2                                                                                                                                                                                                                                                                                                                                                   |
-      |          | backend  | git config git-town-branch.branch-2.parent main                                                                                                                                                                                                                                                                                                                         |
+      | BRANCH   | TYPE     | COMMAND                                          |
+      |          | backend  | git version                                      |
+      |          | backend  | git rev-parse --show-toplevel                    |
+      |          | backend  | git config -lz --includes --global               |
+      |          | backend  | git config -lz --includes --local                |
+      |          | backend  | git status -z --ignore-submodules                |
+      |          | backend  | git rev-parse --verify -q MERGE_HEAD             |
+      |          | backend  | git rev-parse --absolute-git-dir                 |
+      |          | backend  | git stash list                                   |
+      |          | backend  | git -c core.abbrev=40 branch -vva --sort=refname |
+      |          | backend  | git remote get-url origin                        |
+      |          | backend  | git rev-parse --verify --abbrev-ref @{-1}        |
+      |          | backend  | git remote get-url origin                        |
+      | branch-1 | frontend | git branch branch-2 {{ sha 'initial commit' }}   |
+      |          | backend  | git rev-parse --verify -q refs/heads/branch-2    |
+      | branch-1 | frontend | git checkout branch-2                            |
+      |          | backend  | git config git-town-branch.branch-2.parent main  |
     And Git Town prints:
       """
       Ran 16 shell commands.
diff --git a/features/sync/features/verbose.feature b/features/sync/features/verbose.feature
index 113de651c..54de06345 100644
--- a/features/sync/features/verbose.feature
+++ b/features/sync/features/verbose.feature
@@ -16,38 +16,38 @@ Feature: display all executed Git commands
 
   Scenario: result
     Then Git Town runs the commands
-      | BRANCH  | TYPE     | COMMAND                                                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git version                                                                                                                                                                                                                                                                                                                                                             |
-      |         | backend  | git rev-parse --show-toplevel                                                                                                                                                                                                                                                                                                                                           |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git status -z --ignore-submodules                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q MERGE_HEAD                                                                                                                                                                                                                                                                                                                                    |
-      |         | backend  | git rev-parse --absolute-git-dir                                                                                                                                                                                                                                                                                                                                        |
-      |         | backend  | git remote                                                                                                                                                                                                                                                                                                                                                              |
-      | feature | frontend | git fetch --prune --tags                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git remote get-url origin                                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git log main..feature --format=%s --reverse                                                                                                                                                                                                                                                                                                                             |
-      | feature | frontend | git checkout main                                                                                                                                                                                                                                                                                                                                                       |
-      | main    | frontend | git -c rebase.updateRefs=false rebase origin/main                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git rev-parse --verify -q refs/heads/main                                                                                                                                                                                                                                                                                                                               |
-      |         | backend  | git rev-list --left-right main...origin/main                                                                                                                                                                                                                                                                                                                            |
-      | main    | frontend | git push                                                                                                                                                                                                                                                                                                                                                                |
-      |         | frontend | git checkout feature                                                                                                                                                                                                                                                                                                                                                    |
-      | feature | frontend | git merge --no-edit --ff main                                                                                                                                                                                                                                                                                                                                           |
-      |         | frontend | git merge --no-edit --ff origin/feature                                                                                                                                                                                                                                                                                                                                 |
-      |         | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git rev-list --left-right feature...origin/feature                                                                                                                                                                                                                                                                                                                      |
-      | feature | frontend | git push                                                                                                                                                                                                                                                                                                                                                                |
-      |         | backend  | git rev-parse --verify -q refs/heads/feature                                                                                                                                                                                                                                                                                                                            |
-      |         | backend  | git for-each-ref --format=refname:%(refname) branchname:%(refname:lstrip=2) sha:%(objectname) head:%(if)%(HEAD)%(then)Y%(else)N%(end) worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end) symref:%(if)%(symref)%(then)Y%(else)N%(end) upstream:%(upstream:lstrip=2) track:%(upstream:track,nobracket) --sort=refname --include-root-refs HEAD refs/heads/ refs/remotes/ |
-      |         | backend  | git config -lz --includes --global                                                                                                                                                                                                                                                                                                                                      |
-      |         | backend  | git config -lz --includes --local                                                                                                                                                                                                                                                                                                                                       |
-      |         | backend  | git stash list                                                                                                                                                                                                                                                                                                                                                          |
+      | BRANCH  | TYPE     | COMMAND                                            |
+      |         | backend  | git version                                        |
+      |         | backend  | git rev-parse --show-toplevel                      |
+      |         | backend  | git config -lz --includes --global                 |
+      |         | backend  | git config -lz --includes --local                  |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |         | backend  | git status -z --ignore-submodules                  |
+      |         | backend  | git rev-parse --verify -q MERGE_HEAD               |
+      |         | backend  | git rev-parse --absolute-git-dir                   |
+      |         | backend  | git remote                                         |
+      | feature | frontend | git fetch --prune --tags                           |
+      |         | backend  | git stash list                                     |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |         | backend  | git rev-parse --verify --abbrev-ref @{-1}          |
+      |         | backend  | git remote get-url origin                          |
+      |         | backend  | git log main..feature --format=%s --reverse        |
+      | feature | frontend | git checkout main                                  |
+      | main    | frontend | git -c rebase.updateRefs=false rebase origin/main  |
+      |         | backend  | git rev-parse --verify -q refs/heads/main          |
+      |         | backend  | git rev-list --left-right main...origin/main       |
+      | main    | frontend | git push                                           |
+      |         | frontend | git checkout feature                               |
+      | feature | frontend | git merge --no-edit --ff main                      |
+      |         | frontend | git merge --no-edit --ff origin/feature            |
+      |         | backend  | git rev-parse --verify -q refs/heads/feature       |
+      |         | backend  | git rev-list --left-right feature...origin/feature |
+      | feature | frontend | git push                                           |
+      |         | backend  | git rev-parse --verify -q refs/heads/feature       |
+      |         | backend  | git -c core.abbrev=40 branch -vva --sort=refname   |
+      |         | backend  | git config -lz --includes --global                 |
+      |         | backend  | git config -lz --includes --local                  |
+      |         | backend  | git stash list                                     |
     And Git Town prints:
       """
       Ran 31 shell commands.
diff --git a/internal/git/commands.go b/internal/git/commands.go
index ebeafa2ce..9199f0620 100644
--- a/internal/git/commands.go
+++ b/internal/git/commands.go
@@ -91,11 +91,11 @@ func (self *Commands) BranchInSyncWithTracking(querier gitdomain.Querier, branch
 }
 
 func (self *Commands) BranchesSnapshot(querier gitdomain.Querier) (gitdomain.BranchesSnapshot, error) {
-	branches, headSHA, err := branchesQuery(querier)
+	output, err := querier.Query("git", "-c", "core.abbrev=40", "branch", "-vva", "--sort=refname")
 	if err != nil {
 		return gitdomain.EmptyBranchesSnapshot(), err
 	}
-	if len(branches) == 0 {
+	if output == "" {
 		// We are in a brand-new repo.
 		// Report the initial branch name (reported by `git branch --show-current`) as the current branch.
 		currentBranch, err := self.CurrentBranchUncached(querier)
@@ -104,76 +104,13 @@ func (self *Commands) BranchesSnapshot(querier gitdomain.Querier) (gitdomain.Bra
 		}
 		return makeBranchesSnapshotNewRepo(currentBranch), nil
 	}
-	result := gitdomain.BranchInfos{}
-	currentBranchOpt := None[gitdomain.LocalBranchName]()
-	for _, branch := range branches {
-		if branch.Symref {
-			// Ignore symbolic refs.
-			continue
-		}
-		if branch.Head && branch.BranchName.IsLocal() {
-			currentBranchOpt = Some(branch.BranchName.LocalName())
-		}
-		switch {
-		case branch.Worktree && !branch.Head:
-			result = append(result, gitdomain.BranchInfo{
-				LocalName:  Some(branch.BranchName.LocalName()),
-				LocalSHA:   Some(branch.SHA),
-				RemoteName: branch.UpstreamOption,
-				RemoteSHA:  None[gitdomain.SHA](), // may be added later
-				SyncStatus: gitdomain.SyncStatusOtherWorktree,
-			})
-		case isLocalRefName(branch.RefName):
-			syncStatus := determineSyncStatus(branch.Track, branch.UpstreamOption)
-			result = append(result, gitdomain.BranchInfo{
-				LocalName:  Some(branch.BranchName.LocalName()),
-				LocalSHA:   Some(branch.SHA),
-				RemoteName: branch.UpstreamOption,
-				RemoteSHA:  None[gitdomain.SHA](), // may be added later
-				SyncStatus: syncStatus,
-			})
-		default:
-			// Not using `BranchName.RemoteName()` because it might not necessarily be prefixed with "origin/".
-			remoteBranchName := gitdomain.NewRemoteBranchName(branch.BranchName.String())
-			if existingBranchWithTracking, hasExistingBranchWithTracking := result.FindByRemoteName(remoteBranchName).Get(); hasExistingBranchWithTracking {
-				existingBranchWithTracking.RemoteSHA = Some(branch.SHA)
-			} else {
-				result = append(result, gitdomain.BranchInfo{
-					LocalName:  None[gitdomain.LocalBranchName](),
-					LocalSHA:   None[gitdomain.SHA](),
-					RemoteName: Some(remoteBranchName),
-					RemoteSHA:  Some(branch.SHA),
-					SyncStatus: gitdomain.SyncStatusRemoteOnly,
-				})
-			}
-		}
-	}
-	if headSHA == "" {
-		panic("HEAD not found in for-each-ref output")
-	}
-	if currentBranchOpt.IsNone() {
-		rebaseInProgress, err := self.HasRebaseInProgress(querier)
-		if err != nil {
-			return gitdomain.EmptyBranchesSnapshot(), err
-		}
-		if !rebaseInProgress {
-			// We are in a detached HEAD state. Use the current HEAD location as the branch name.
-			currentBranchOpt = Some(gitdomain.NewLocalBranchName(headSHA.String()))
-			// prepend to result
-			result = slices.Insert(result, 0, gitdomain.BranchInfo{
-				LocalName:  currentBranchOpt,
-				LocalSHA:   Some(headSHA),
-				RemoteName: None[gitdomain.RemoteBranchName](),
-				RemoteSHA:  None[gitdomain.SHA](),
-				SyncStatus: gitdomain.SyncStatusLocalOnly,
-			})
-		}
-	}
-	if currentBranch, hasCurrentBranch := currentBranchOpt.Get(); hasCurrentBranch {
+	branches, currentBranchOpt := ParseVerboseBranchesOutput(output)
+	currentBranch, hasCurrentBranch := currentBranchOpt.Get()
+	if hasCurrentBranch {
 		self.CurrentBranchCache.Set(currentBranch)
 	}
 	return gitdomain.BranchesSnapshot{
-		Branches: result,
+		Branches: branches,
 		Active:   currentBranchOpt,
 	}, nil
 }
@@ -922,6 +859,57 @@ func (self *Commands) UnstageAll(runner gitdomain.Runner) error {
 	return runner.Run("git", "restore", "--staged", ".")
 }
 
+func IsAhead(branchName, remoteText string) (bool, Option[gitdomain.RemoteBranchName]) {
+	reText := fmt.Sprintf(`\[(\w+\/%s): ahead \d+\] `, regexp.QuoteMeta(branchName))
+	re := regexp.MustCompile(reText)
+	matches := re.FindStringSubmatch(remoteText)
+	if len(matches) == 2 {
+		return true, Some(gitdomain.NewRemoteBranchName(matches[1]))
+	}
+	return false, None[gitdomain.RemoteBranchName]()
+}
+
+func IsAheadAndBehind(branchName, remoteText string) (bool, Option[gitdomain.RemoteBranchName]) {
+	reText := fmt.Sprintf(`\[(\w+\/%s): ahead \d+, behind \d+\] `, regexp.QuoteMeta(branchName))
+	re := regexp.MustCompile(reText)
+	matches := re.FindStringSubmatch(remoteText)
+	if len(matches) == 2 {
+		return true, Some(gitdomain.NewRemoteBranchName(matches[1]))
+	}
+	return false, None[gitdomain.RemoteBranchName]()
+}
+
+func IsBehind(branchName, remoteText string) (bool, Option[gitdomain.RemoteBranchName]) {
+	reText := fmt.Sprintf(`\[(\w+\/%s): behind \d+\] `, regexp.QuoteMeta(branchName))
+	re := regexp.MustCompile(reText)
+	matches := re.FindStringSubmatch(remoteText)
+	if len(matches) == 2 {
+		return true, Some(gitdomain.NewRemoteBranchName(matches[1]))
+	}
+	return false, None[gitdomain.RemoteBranchName]()
+}
+
+func IsInSync(branchName, remoteText string) (bool, Option[gitdomain.RemoteBranchName]) {
+	reText := fmt.Sprintf(`\[(\w+\/%s)\] `, regexp.QuoteMeta(branchName))
+	re := regexp.MustCompile(reText)
+	matches := re.FindStringSubmatch(remoteText)
+	if len(matches) == 2 {
+		return true, Some(gitdomain.NewRemoteBranchName(matches[1]))
+	}
+	return false, None[gitdomain.RemoteBranchName]()
+}
+
+// IsRemoteGone indicates whether the given part of "git branch -vva" indicates a deleted tracking branch.
+func IsRemoteGone(branchName, remoteText string) (bool, Option[gitdomain.RemoteBranchName]) {
+	reText := fmt.Sprintf(`^\[(\w+\/%s): gone\] `, regexp.QuoteMeta(branchName))
+	re := regexp.MustCompile(reText)
+	matches := re.FindStringSubmatch(remoteText)
+	if len(matches) == 2 {
+		return true, Some(gitdomain.NewRemoteBranchName(matches[1]))
+	}
+	return false, None[gitdomain.RemoteBranchName]()
+}
+
 func LastBranchInRef(output string) string {
 	index := strings.LastIndex(output, "/")
 	return output[index+1:]
@@ -936,103 +924,101 @@ func NewUnmergedStage(value int) (UnmergedStage, error) {
 	return 0, fmt.Errorf("unknown stage ID: %q", value)
 }
 
-type branchesQueryResult struct {
-	BranchName     gitdomain.BranchName
-	Head           bool
-	RefName        string
-	SHA            gitdomain.SHA
-	Symref         bool
-	Track          string
-	UpstreamOption Option[gitdomain.RemoteBranchName] // the tracking branch name
-	Worktree       bool
-}
-
-type branchesQueryResults []branchesQueryResult
-
-func branchesQuery(querier gitdomain.Querier) (result branchesQueryResults, headSHA gitdomain.SHA, err error) {
-	// WHAT DOES `:lstrip=2` DO?
-	// A ref name looks like "refs/heads/branch-name" or
-	// "refs/remotes/origin/branch-name". We want to remove the "refs/heads/" or
-	// "refs/remotes" prefixes, so we use `:lstrip=2` to remove the first two path
-	// components.
-	// WHY NOT USE `:short`?
-	// `:short` returns a "non-ambiguous" name. This means that if a branch and a
-	// tag have the same name, it will return something like "heads/branch-name"
-	// instead of "branch-name". We just want the branch name.
-	forEachRefFormats := []string{
-		"refname:%(refname)",                                  // full ref name
-		"branchname:%(refname:lstrip=2)",                      // branch name
-		"sha:%(objectname)",                                   // SHA of the commit the ref points to
-		"head:%(if)%(HEAD)%(then)Y%(else)N%(end)",             // is the branch checked out in the current worktree? Y/N
-		"worktree:%(if)%(worktreepath)%(then)Y%(else)N%(end)", // is the branch checked out in any worktree? Y/N
-		"symref:%(if)%(symref)%(then)Y%(else)N%(end)",         // is the branch a symbolic ref? Y/N
-		"upstream:%(upstream:lstrip=2)",                       // the tracking branch name
-		// Leave `track` in the last position because it is the only one that contains spaces.
-		// Then we can use SplitN to split the output correctly.
-		"track:%(upstream:track,nobracket)", // e.g. "ahead 2", "behind 2", "ahead 2, behind 3", "gone"
-	}
-	output, err := querier.QueryTrim(
-		"git", "for-each-ref",
-		"--format="+strings.Join(forEachRefFormats, " "),
-		"--sort=refname",
-		"--include-root-refs",                  // include HEAD (to be able to detect detached HEAD)
-		"HEAD", "refs/heads/", "refs/remotes/", // HEAD, local branches, remote branches
-	)
-	if err != nil {
-		return branchesQueryResults{}, "", err
-	}
+func ParseVerboseBranchesOutput(output string) (gitdomain.BranchInfos, Option[gitdomain.LocalBranchName]) {
+	result := gitdomain.BranchInfos{}
+	spaceRE := regexp.MustCompile(" +")
 	lines := stringslice.Lines(output)
+	checkedoutBranch := None[gitdomain.LocalBranchName]()
 	for _, line := range lines {
-		parts := strings.SplitN(line, " ", len(forEachRefFormats))
-		refname := strings.TrimPrefix(parts[0], "refname:")
-		sha := gitdomain.NewSHA(strings.TrimPrefix(parts[2], "sha:"))
+		if strings.TrimSpace(line) == "" {
+			continue
+		}
+		parts := spaceRE.Split(line[2:], 3)
+		if strings.HasSuffix(parts[0], "/HEAD") {
+			continue
+		}
+		if len(parts) < 2 {
+			// This shouldn't happen, but did happen in https://github.com/git-town/git-town/issues/2562.
+			fmt.Printf(messages.GitOutputIrregular, line, output)
+			os.Exit(1)
+		}
+		if parts[0] == "(no" || parts[1] == "(no" || parts[1] == "branch," { // "(no" as in "(no branch, rebasing main)" is what we get when a rebase is active, in which case no branch is checked out
+			continue
+		}
+		var branchName string
+		var sha Option[gitdomain.SHA]
+		if parts[1] == "detached" {
+			parts := spaceRE.Split(line[2:], 6)
+			branchName = parts[4]
+			sha = Some(gitdomain.NewSHA(parts[4]))
+		} else {
+			branchName = parts[0]
+			rawSHA := parts[1]
+			if rawSHA == "->" {
+				continue
+			}
+			sha = Some(gitdomain.NewSHA(rawSHA))
+		}
+		remoteText := parts[2]
+		if line[0] == '*' {
+			checkedoutBranch = Some(gitdomain.NewLocalBranchName(branchName))
+		}
+		syncStatus, trackingBranchName := determineSyncStatus(branchName, remoteText)
 		switch {
-		case refname == "HEAD":
-			// Track where HEAD is pointing. If we're in a detached HEAD state, we'll use this later.
-			headSHA = sha
-		default:
-			branchName := gitdomain.NewBranchName(strings.TrimPrefix(parts[1], "branchname:"))
-			head := parseYN(strings.TrimPrefix(parts[3], "head:"))
-			worktree := parseYN(strings.TrimPrefix(parts[4], "worktree:"))
-			symref := parseYN(strings.TrimPrefix(parts[5], "symref:"))
-			upstreamOption := gitdomain.NewRemoteBranchNameOption(strings.TrimPrefix(parts[6], "upstream:")) // the tracking branch name
-			track := strings.TrimPrefix(parts[7], "track:")
-			result = append(result, branchesQueryResult{
-				BranchName:     branchName,
-				Head:           head,
-				RefName:        refname,
-				SHA:            sha,
-				Symref:         symref,
-				Track:          track,
-				UpstreamOption: upstreamOption,
-				Worktree:       worktree,
+		case line[0] == '+':
+			result = append(result, gitdomain.BranchInfo{
+				LocalName:  Some(gitdomain.NewLocalBranchName(branchName)),
+				LocalSHA:   sha,
+				SyncStatus: gitdomain.SyncStatusOtherWorktree,
+				RemoteName: trackingBranchName,
+				RemoteSHA:  None[gitdomain.SHA](),
+			})
+		case isLocalBranchName(branchName):
+			result = append(result, gitdomain.BranchInfo{
+				LocalName:  Some(gitdomain.NewLocalBranchName(branchName)),
+				LocalSHA:   sha,
+				SyncStatus: syncStatus,
+				RemoteName: trackingBranchName,
+				RemoteSHA:  None[gitdomain.SHA](), // will be added later
 			})
+		default:
+			remoteBranchName := gitdomain.NewRemoteBranchName(strings.TrimPrefix(branchName, "remotes/"))
+			if existingBranchWithTracking, hasExistingBranchWithTracking := result.FindByRemoteName(remoteBranchName).Get(); hasExistingBranchWithTracking {
+				existingBranchWithTracking.RemoteSHA = sha
+			} else {
+				result = append(result, gitdomain.BranchInfo{
+					LocalName:  None[gitdomain.LocalBranchName](),
+					LocalSHA:   None[gitdomain.SHA](),
+					SyncStatus: gitdomain.SyncStatusRemoteOnly,
+					RemoteName: Some(remoteBranchName),
+					RemoteSHA:  sha,
+				})
+			}
 		}
 	}
-	return result, headSHA, nil
+	return result, checkedoutBranch
 }
 
-func determineSyncStatus(track string, upstream Option[gitdomain.RemoteBranchName]) gitdomain.SyncStatus {
-	gone := track == "gone"
-	ahead := strings.Contains(track, "ahead")
-	behind := strings.Contains(track, "behind")
-	switch {
-	case gone:
-		return gitdomain.SyncStatusDeletedAtRemote
-	case ahead && behind:
-		return gitdomain.SyncStatusNotInSync
-	case ahead:
-		return gitdomain.SyncStatusAhead
-	case behind:
-		return gitdomain.SyncStatusBehind
-	case track == "":
-		if upstream.IsSome() {
-			return gitdomain.SyncStatusUpToDate
-		}
-		return gitdomain.SyncStatusLocalOnly
-	default:
-		panic(fmt.Sprintf(`unrecognized track "%s"`, track))
+func determineSyncStatus(branchName, remoteText string) (syncStatus gitdomain.SyncStatus, trackingBranchName Option[gitdomain.RemoteBranchName]) {
+	if isInSync, trackingBranchName := IsInSync(branchName, remoteText); isInSync {
+		return gitdomain.SyncStatusUpToDate, trackingBranchName
+	}
+	if isGone, trackingBranchName := IsRemoteGone(branchName, remoteText); isGone {
+		return gitdomain.SyncStatusDeletedAtRemote, trackingBranchName
+	}
+	if isAhead, trackingBranchName := IsAhead(branchName, remoteText); isAhead {
+		return gitdomain.SyncStatusAhead, trackingBranchName
+	}
+	if isBehind, trackingBranchName := IsBehind(branchName, remoteText); isBehind {
+		return gitdomain.SyncStatusBehind, trackingBranchName
+	}
+	if isAheadAndBehind, trackingBranchName := IsAheadAndBehind(branchName, remoteText); isAheadAndBehind {
+		return gitdomain.SyncStatusNotInSync, trackingBranchName
 	}
+	if strings.HasPrefix(branchName, "remotes/") {
+		return gitdomain.SyncStatusRemoteOnly, None[gitdomain.RemoteBranchName]()
+	}
+	return gitdomain.SyncStatusLocalOnly, None[gitdomain.RemoteBranchName]()
 }
 
 // provides the path of the `.git` directory of the current repository.
@@ -1044,9 +1030,9 @@ func (self *Commands) gitDirectory(querier gitdomain.Querier) (string, error) {
 	return output, nil
 }
 
-// indicates whether the ref is a local branch
-func isLocalRefName(ref string) bool {
-	return strings.HasPrefix(ref, "refs/heads/")
+// indicates whether the branch with the given name exists locally
+func isLocalBranchName(branch string) bool {
+	return !strings.HasPrefix(branch, "remotes/")
 }
 
 func makeBranchesSnapshotNewRepo(branch gitdomain.LocalBranchName) gitdomain.BranchesSnapshot {
@@ -1063,14 +1049,3 @@ func makeBranchesSnapshotNewRepo(branch gitdomain.LocalBranchName) gitdomain.Bra
 		},
 	}
 }
-
-func parseYN(value string) bool {
-	switch value {
-	case "Y":
-		return true
-	case "N":
-		return false
-	default:
-		panic(fmt.Sprintf("unrecognized value %q", value))
-	}
-}
diff --git a/internal/git/gitdomain/remote_branch_name.go b/internal/git/gitdomain/remote_branch_name.go
index 7eb719f0c..899765302 100644
--- a/internal/git/gitdomain/remote_branch_name.go
+++ b/internal/git/gitdomain/remote_branch_name.go
@@ -3,8 +3,6 @@ package gitdomain
 import (
 	"fmt"
 	"strings"
-
-	. "github.com/git-town/git-town/v19/pkg/prelude"
 )
 
 // RemoteBranchName is the name of a remote branch, e.g. "origin/foo".
@@ -17,13 +15,6 @@ func NewRemoteBranchName(id string) RemoteBranchName {
 	return RemoteBranchName(id)
 }
 
-func NewRemoteBranchNameOption(id string) Option[RemoteBranchName] {
-	if isValidRemoteBranchName(id) {
-		return Some(NewRemoteBranchName(id))
-	}
-	return None[RemoteBranchName]()
-}
-
 func isValidRemoteBranchName(value string) bool {
 	if len(value) < 3 {
 		return false
diff --git a/internal/messages/en.go b/internal/messages/en.go
index bda320c13..98d9dec7c 100644
--- a/internal/messages/en.go
+++ b/internal/messages/en.go
@@ -76,48 +76,59 @@ const (
 	CreatePrototypeBranches            = "Create prototype branches:"
 	CreatePrototypeBranchesDeprecation = `The Git Town configuration file contains the deprecated setting "create-prototype-branches".
 Please upgrade to the new format: create.new-branch-type = "prototype"`
-	DefaultBranchType                   = "Default branch type: %s\n"
-	DetachNeedsSync                     = "please sync this stack before detaching branches from it"
-	DetachNoParent                      = "cannot detach branches without parent"
-	DetachOtherWorkTree                 = "cannot detach because branch %q it is active in another worktree"
-	DetachRemoteBranch                  = "cannot detach a remote branch"
-	DetachUnsupportedBranchType         = "cannot detach %s branches since you don't own them"
-	DevRemote                           = "Development remote: %s\n"
-	DiffConflictWithMain                = "conflicts between your uncommmitted changes and the main branch"
-	DryRun                              = "In dry run mode. No commands will be run. When run in normal mode, the command output will appear beneath the command. Some commands will only be run if necessary. For example: 'git push' will run if and only if there are local commits not on origin."
-	ValueInvalid                        = "invalid value for %s: %q. Please provide either \"yes\" or \"no\""
-	ConflictDetectionProblem            = "cannot determine conflicts: %w"
-	ContinueNothingToDo                 = "nothing to continue"
-	ContinueUnresolvedConflicts         = "you must resolve the conflicts before continuing"
-	ContinueUntrackedChanges            = "please stage or commit the untracked changes first"
-	CurrentBranchCannotDetermine        = "cannot determine the current branch"
-	DialogUnexpectedResponse            = "unexpected response: %s"
-	DiffParentNoFeatureBranch           = "you can only diff-parent feature branches"
-	DiffProblem                         = "cannot list diff of %q and %q: %w"
-	DirCurrentProblem                   = "cannot determine the current directory"
-	FeatureRegex                        = "Feature regex: %s\n"
-	FileContentInvalidJSON              = "cannot parse JSON content of file %q: %w"
-	FileDeleteProblem                   = "cannot delete file %q: %w"
-	FileReadProblem                     = "cannot read file %q: %w"
-	FileStatProblem                     = "cannot check file %q: %w"
-	FileWriteProblem                    = "cannot write file %q: %w"
-	Forge                               = "Forge: %s\n"
-	ForgeAPITokenLocation               = "API token scope: %s"
-	ForgeBitbucketNotImplemented        = "shipping pull requests via the Bitbucket API is currently not supported. If you need this functionality, please vote for it by opening a ticket at https://github.com/git-town/git-town/issues"
-	ForgeBitbucketMergingViaAPI         = "Bitbucket API: merging PR %s ... "
-	ForgeCodebergMergingViaAPI          = "Codeberg API: merging PR %s ... "
-	ForgeGitlabMergingViaAPI            = "Merging MR !%d ... "
-	ForgeGitlabUpdateMRViaAPI           = "Updating target branch for MR !%d to %q ... "
-	ForgeGiteaNotImplemented            = "shipping pull requests via the Gitea API is currently not supported. If you need this functionality, please vote for it by opening a ticket at https://github.com/git-town/git-town/issues"
-	ForgeGiteaUpdatePRViaAPI            = "Gitea API: Updating base branch for PR #%d to #%s"
-	ForgeGithubMergingViaAPI            = "GitHub API: merging PR %s ... "
-	ForgeTypeUnknown                    = "unknown forge type: %q"
-	GiteaToken                          = "Gitea token: %s\n"
-	GitAnotherProcessIsRunningRetry     = "another git process seems to be running in this repository, retrying in 1 sec ..."
-	GitHubEnterpriseInitializeError     = "cannot initialize GitHub Enterprise client: %s"
-	GitHubToken                         = "GitHub token: %s\n"
-	GitLabToken                         = "GitLab token: %s\n"
-	GitDirMissing                       = "cannot determine the '.git' directory: %w"
+	DefaultBranchType               = "Default branch type: %s\n"
+	DetachNeedsSync                 = "please sync this stack before detaching branches from it"
+	DetachNoParent                  = "cannot detach branches without parent"
+	DetachOtherWorkTree             = "cannot detach because branch %q it is active in another worktree"
+	DetachRemoteBranch              = "cannot detach a remote branch"
+	DetachUnsupportedBranchType     = "cannot detach %s branches since you don't own them"
+	DevRemote                       = "Development remote: %s\n"
+	DiffConflictWithMain            = "conflicts between your uncommmitted changes and the main branch"
+	DryRun                          = "In dry run mode. No commands will be run. When run in normal mode, the command output will appear beneath the command. Some commands will only be run if necessary. For example: 'git push' will run if and only if there are local commits not on origin."
+	ValueInvalid                    = "invalid value for %s: %q. Please provide either \"yes\" or \"no\""
+	ConflictDetectionProblem        = "cannot determine conflicts: %w"
+	ContinueNothingToDo             = "nothing to continue"
+	ContinueUnresolvedConflicts     = "you must resolve the conflicts before continuing"
+	ContinueUntrackedChanges        = "please stage or commit the untracked changes first"
+	CurrentBranchCannotDetermine    = "cannot determine the current branch"
+	DialogUnexpectedResponse        = "unexpected response: %s"
+	DiffParentNoFeatureBranch       = "you can only diff-parent feature branches"
+	DiffProblem                     = "cannot list diff of %q and %q: %w"
+	DirCurrentProblem               = "cannot determine the current directory"
+	FeatureRegex                    = "Feature regex: %s\n"
+	FileContentInvalidJSON          = "cannot parse JSON content of file %q: %w"
+	FileDeleteProblem               = "cannot delete file %q: %w"
+	FileReadProblem                 = "cannot read file %q: %w"
+	FileStatProblem                 = "cannot check file %q: %w"
+	FileWriteProblem                = "cannot write file %q: %w"
+	Forge                           = "Forge: %s\n"
+	ForgeAPITokenLocation           = "API token scope: %s"
+	ForgeBitbucketNotImplemented    = "shipping pull requests via the Bitbucket API is currently not supported. If you need this functionality, please vote for it by opening a ticket at https://github.com/git-town/git-town/issues"
+	ForgeBitbucketMergingViaAPI     = "Bitbucket API: merging PR %s ... "
+	ForgeCodebergMergingViaAPI      = "Codeberg API: merging PR %s ... "
+	ForgeGitlabMergingViaAPI        = "Merging MR !%d ... "
+	ForgeGitlabUpdateMRViaAPI       = "Updating target branch for MR !%d to %q ... "
+	ForgeGiteaNotImplemented        = "shipping pull requests via the Gitea API is currently not supported. If you need this functionality, please vote for it by opening a ticket at https://github.com/git-town/git-town/issues"
+	ForgeGiteaUpdatePRViaAPI        = "Gitea API: Updating base branch for PR #%d to #%s"
+	ForgeGithubMergingViaAPI        = "GitHub API: merging PR %s ... "
+	ForgeTypeUnknown                = "unknown forge type: %q"
+	GiteaToken                      = "Gitea token: %s\n"
+	GitAnotherProcessIsRunningRetry = "another git process seems to be running in this repository, retrying in 1 sec ..."
+	GitHubEnterpriseInitializeError = "cannot initialize GitHub Enterprise client: %s"
+	GitHubToken                     = "GitHub token: %s\n"
+	GitLabToken                     = "GitLab token: %s\n"
+	GitDirMissing                   = "cannot determine the '.git' directory: %w"
+	GitOutputIrregular              = `
+ERROR: Encountered irregular Git output
+
+PLEASE REPORT THE OUTPUT BELOW AT https://github.com/git-town/git-town/issues/new
+
+roblematic line: %q
+
+BEGIN OUTPUT FROM 'git branch -vva'
+%s
+END OUTPUT FROM 'git branch -vva'
+`
 	GitUserEmailMissing                 = `please set the Git user email by running: git config --global user.email "<your email>"`
 	GitUserNameMissing                  = `please set the Git user name by running: git config --global user.name "<your name>"`
 	GitURLCannotParse                   = "cannot parse Git URL %q"



Test patch:
diff --git a/internal/git/commands_test.go b/internal/git/commands_test.go
index b1550a1de..9198afed9 100644
--- a/internal/git/commands_test.go
+++ b/internal/git/commands_test.go
@@ -329,7 +329,6 @@ func TestBackendCommands(t *testing.T) {
 				must.NoError(t, err)
 				must.Eq(t, Some[gitdomain.LocalBranchName]("first-branch"), snapshot.Active)
 			})
-
 			t.Run("second branch is checked out", func(t *testing.T) {
 				t.Parallel()
 				runtime := testruntime.Create(t)
@@ -340,7 +339,6 @@ func TestBackendCommands(t *testing.T) {
 				must.NoError(t, err)
 				must.Eq(t, Some[gitdomain.LocalBranchName]("second-branch"), snapshot.Active)
 			})
-
 			t.Run("in the middle of a rebase", func(t *testing.T) {
 				t.Parallel()
 				runtime := testruntime.Create(t)
@@ -1242,6 +1240,63 @@ func TestBackendCommands(t *testing.T) {
 		})
 	})
 
+	t.Run("IsAhead", func(t *testing.T) {
+		t.Parallel()
+		t.Run("is actually ahead", func(t *testing.T) {
+			t.Parallel()
+			isAhead, remoteBranchName := git.IsAhead("branch-1", "[origin/branch-1: ahead 10] commit message")
+			must.True(t, isAhead)
+			must.EqOp(t, "origin/branch-1", remoteBranchName.String())
+		})
+		t.Run("is not ahead", func(t *testing.T) {
+			t.Parallel()
+			isAhead, remoteBranchName := git.IsAhead("branch-1", "[origin/branch-1: behind 10] commit message")
+			must.False(t, isAhead)
+			must.EqOp(t, "", remoteBranchName.String())
+		})
+	})
+
+	t.Run("IsBehind", func(t *testing.T) {
+		t.Parallel()
+		has, branchNameOpt := git.IsBehind("production", "[origin/production: behind 1] initial commit")
+		must.True(t, has)
+		branchName, hasBranchName := branchNameOpt.Get()
+		must.True(t, hasBranchName)
+		must.EqOp(t, "origin/production", branchName)
+	})
+
+	t.Run("IsInSync", func(t *testing.T) {
+		t.Parallel()
+		t.Run("is actually in sync", func(t *testing.T) {
+			t.Parallel()
+			isInSync, remoteBranchName := git.IsInSync("branch-1", "[origin/branch-1] commit message")
+			must.True(t, isInSync)
+			must.EqOp(t, "origin/branch-1", remoteBranchName.String())
+		})
+	})
+
+	t.Run("IsRemoteGone", func(t *testing.T) {
+		t.Parallel()
+		t.Run("remote is gone", func(t *testing.T) {
+			t.Parallel()
+			isGone, remoteBranchName := git.IsRemoteGone("branch-1", "[origin/branch-1: gone] commit message")
+			must.True(t, isGone)
+			must.Eq(t, Some(gitdomain.NewRemoteBranchName("origin/branch-1")), remoteBranchName)
+		})
+		t.Run("other sync status", func(t *testing.T) {
+			t.Parallel()
+			isGone, remoteBranchName := git.IsRemoteGone("branch-1", "[origin/branch-1: ahead] commit message")
+			must.False(t, isGone)
+			must.Eq(t, None[gitdomain.RemoteBranchName](), remoteBranchName)
+		})
+		t.Run("other text", func(t *testing.T) {
+			t.Parallel()
+			isGone, remoteBranchName := git.IsRemoteGone("branch-1", "[skip ci]")
+			must.False(t, isGone)
+			must.Eq(t, None[gitdomain.RemoteBranchName](), remoteBranchName)
+		})
+	})
+
 	t.Run("MergeFastForward", func(t *testing.T) {
 		t.Parallel()
 		branch := gitdomain.NewLocalBranchName("branch")
diff --git a/internal/test/commands/test_commands.go b/internal/test/commands/test_commands.go
index 175ca2b42..f6f70f4ca 100644
--- a/internal/test/commands/test_commands.go
+++ b/internal/test/commands/test_commands.go
@@ -358,19 +358,16 @@ func (self *TestCommands) LineageTable() datatable.DataTable {
 func (self *TestCommands) LocalBranches() (allBranches, branchesInOtherWorktrees gitdomain.LocalBranchNames, err error) {
 	forEachRefFormat := strings.Join(
 		[]string{
-			// worktree marker
 			"%(if)", "%(HEAD)", "%(then)", // If the branch is checked out in the current worktree
 			"H", // literal "H"
 			"%(else)",
 			"%(if)", "%(worktreepath)", "%(then)", // If the branch is checked out in any (other) worktree
 			"W", // literal "W"
 			"%(else)",
-			"-", // literal "-"
+			" ", // literal " "
 			"%(end)",
 			"%(end)",
 
-			" ", // space separator
-
 			"%(refname:lstrip=2)", // the branch name (without refs/heads/)
 		},
 		"")
@@ -380,10 +377,10 @@ func (self *TestCommands) LocalBranches() (allBranches, branchesInOtherWorktrees
 	}
 	for _, line := range stringslice.Lines(output) {
 		marker := line[0]
-		branch := line[2:]
+		branch := line[1:]
 		allBranches = append(allBranches, gitdomain.NewLocalBranchName(branch))
 		switch marker {
-		case 'H', '-':
+		case 'H', ' ':
 		case 'W':
 			branchesInOtherWorktrees = append(branchesInOtherWorktrees, gitdomain.NewLocalBranchName(branch))
 		default: