Да как насчет 100к родителей?
Вот живой пример GitHub со слиянием 100 000 коммитов: https://github.com/cirosantilli/test-octopus-100k, созданный с помощью этого скрипта .
пустяки
Линус не любит коммиты с более чем 60 родителями: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history
Это тянет, и это хорошо, но есть четкий баланс между «слияния осьминога в порядке» и «Христос, это не осьминог, это слияние Ктулху».
Посмотрите на формат для объекта коммита Git
https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460
Из этого анализа мы можем видеть, что список родителей является произвольным разделенным символом новой строки списком типа:
parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}
и поэтому разрешено произвольное количество родителей.
Минимальный пример
Автор сценария:
#!/usr/bin/env bash
set -eu
mkdir tmp
cd tmp
git init
touch root
git add .
git commit -m root
sha_root="$(git log -1 --format="%H")"
touch 1
git add .
git commit -m 1
sha1="$(git log -1 --format="%H")"
git reset --hard "$sha_root"
touch 2
git add .
git commit -m 2
sha2="$(git log -1 --format="%H")"
git reset --hard "$sha_root"
touch 3
git add .
git commit -m 3
sha3="$(git log -1 --format="%H")"
git merge -m merge "$sha1" "$sha2"
Выход:
*-. 2d2a6c2 (HEAD -> master) merge
|\ \
| | * 2300c18 2
| * | 7e096cb 1
| |/
* | 50aa125 3
|/
* a1e94fd root