Có, bố mẹ 100k thì sao?
Dưới đây là một ví dụ GitHub trực tiếp với sự hợp nhất của 100 nghìn cam kết: https://github.com/cirosantilli/test-octopus-100k Được tạo bằng tập lệnh này .
Câu đố
Linus không thích cam kết với hơn 60 phụ huynh: https://www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history
Nó đã được kéo, và nó ổn, nhưng rõ ràng có sự cân bằng giữa "sự hợp nhất của bạch tuộc là tốt" và "Chúa Kitô, đó không phải là một con bạch tuộc, đó là sự hợp nhất của Cthulhu".
Hãy xem định dạng cho đối tượng cam kết Git
https://stackoverflow.com/questions/22968856/what-is-the-file-format-of-a-git-commit-object/37438460#37438460
Từ phân tích đó, chúng ta có thể thấy rằng danh sách danh sách cha mẹ là một danh sách loại mới được phân tách tùy ý:
parent {parent_1_sha}
parent {parent_2_sha}
...
parent {parent_N_sha}
và vì vậy một số lượng phụ huynh tùy ý được cho phép.
Ví dụ tối thiểu
Kịch bả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"
Đầu ra:
*-. 2d2a6c2 (HEAD -> master) merge
|\ \
| | * 2300c18 2
| * | 7e096cb 1
| |/
* | 50aa125 3
|/
* a1e94fd root