In case anyone is curious and lazy, here is a script that generates all possible status letters containing T: #!/bin/sh set -e _T() { touch file-1.T git add file-1.T git commit -q -m add rm file-1.T ln -s /dev/null file-1.T } MT() { touch file-1MT git add file-1MT git commit -q -m add echo modify > file-1MT git add file-1MT ln -sf /dev/null file-1MT } TM() { ln -sf /dev/null file-1TM git add file-1TM git commit -q -m add rm file-1TM touch file-1TM git add file-1TM echo modify > file-1TM } TT() { touch file-1TT git add file-1TT git commit -q -m add ln -sf /dev/null file-1TT git add file-1TT rm file-1TT touch file-1TT } TD() { touch file-1TD git add file-1TD git commit -q -m add ln -sf /dev/null file-1TD git add file-1TD rm file-1TD } AT() { touch file-1AT git add file-1AT git commit -q -m add ln -sf /dev/null file-1AT } RT() { touch file-2RT git add file-2RT git commit -q -m add git mv file-2RT new-file-2RT ln -sf /dev/null new-file-2RT } T_() { touch file-1T. git add file-1T. git commit -q -m add ln -sf /dev/null file-1T. git add file-1T. } cd "$(mktemp -d)" git init -q git commit -q --allow-empty -m initial\ commit for state in _T MT TM TT TD AT RT T_ do git reset -q --hard :/initial.commit "$state" git status --porcelain=2 done