Binjian Xin | 2023-09-18
Table of Contents

Consult the manual:
git submodule foreach --recursive 'git log'
Debugged:
git submodule foreach --recursive 'git log --oneline'
More functions:
git submodule foreach --recursive 'git log --oneline HEAD...HEAD~5'
git submodule foreach --recursive '
REV1=HEAD;
REV2=HEAD~10;
SHA1=$(cd $toplevel && git ls-tree $REV1 $sm_path | \
grep -E -o "[0-9a-f]{40}");
SHA2=$(cd $toplevel && git ls-tree $REV2 $sm_path | \
grep -E -o "[0-9a-f]{40}");
git log --oneline $SHA1...$SHA2'
git submodule foreach --recursive '
SHA1=$(cd $toplevel && cd $sm_path && git log | \
grep -E -o "[0-9a-f]{40}" | head -1);
SHA2=$(cd $toplevel && cd $sm_path && git log | \
grep -E -o "[0-9a-f]{40}" | head -10 | tail -n1);
git log --oneline $SHA1...$SHA2'


| A | A^0 | |||
|---|---|---|---|---|
| B | A^ | A^1 | A~1 | |
| C | A^2 | |||
| D | A^^ | A^1^1 | A~2 | B^1 |
| E | B^2 | A^^2 | ||
| F | B^3 | A^^3 | ||
| G | A^^^ | A^1^1^1 | A~3 | D^1 |
| H | D^2 | B^^2 | A^^^2 | A~2^2 |
| I | F^ | B^3^ | A^^3^ | |
| J | F^2 | B^3^2 | A^^3^2 |

Version range syntax
| Input | Decomposition | Result |
|---|---|---|
| D | G H D | |
| D F | G H I J D F | |
| ^G D | H D | |
| ^D B | E I J F B | |
| ^D B C | E I J F B C | |
| C | I J F C | |
| B..C | ^B C | C |

| B…C | B ^F C | G H D E B C |
|---|---|---|
| B^- (merge) | B^..B | |
| ^B^1 B | E I J F B | |
| C^@ | C^1, F | I J F |
| C^! | C ^C^@, C ^F | C |
| F^! D | F ^I ^J D | G H D F |