Ya, bagaimana dengan 100k orang tua?
Berikut ini adalah contoh GitHub langsung dengan gabungan 100k komit: https://github.com/cirosantilli/test-octopus-100k Dihasilkan dengan skrip ini .
Hal sepele
Linus tidak suka komitmen dengan lebih dari 60 orang tua: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history
Ini ditarik, dan itu baik-baik saja, tetapi jelas ada keseimbangan antara "gurita menggabungkan baik-baik saja" dan "Ya Tuhan, itu bukan gurita, itu penggabungan Cthulhu".
Lihat format untuk objek komit Git
https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460
Dari analisis itu, kita dapat melihat bahwa daftar daftar orang tua adalah daftar jenis baris baru yang sewenang-wenang:
parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}
sehingga jumlah orang tua yang sewenang-wenang diizinkan.
Contoh minimal
Naskah:
#!/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"
Keluaran:
*-. 2d2a6c2 (HEAD -> master) merge
|\ \
| | * 2300c18 2
| * | 7e096cb 1
| |/
* | 50aa125 3
|/
* a1e94fd root