हाँ, कैसे 100k माता-पिता के बारे में?
यहाँ 100k कमिट के मर्ज के साथ एक लाइव GitHub उदाहरण है: 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