Sí, ¿qué tal 100k padres?
Aquí hay un ejemplo de GitHub en vivo con una fusión de 100k commits: https://github.com/cirosantilli/test-octopus-100k Generado con este script .
Trivialidades
A Linus no le gustan los compromisos con más de 60 padres: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history
Se tira y está bien, pero claramente hay un equilibrio entre "las combinaciones de pulpo están bien" y "Cristo, eso no es un pulpo, es una fusión de Cthulhu".
Eche un vistazo al formato para el objeto de confirmación Git
https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460
De ese análisis, podemos ver que la lista de padres es una lista arbitraria de tipo separada por una nueva línea:
parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}
y entonces se permite un número arbitrario de padres.
Ejemplo mínimo
Guión:
#!/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"
Salida:
*-. 2d2a6c2 (HEAD -> master) merge
|\ \
| | * 2300c18 2
| * | 7e096cb 1
| |/
* | 50aa125 3
|/
* a1e94fd root