回答:
git mergeを使用して、複数のコミットを現在のブランチにマージできます。からman git-merge
(またはgit help merge
):
git-merge-2つ以上の開発履歴を結合します
その結果、3つ以上の親とのコミットが行われます。
はい、10万人の親はどうですか?
以下は、10万件のコミットがマージされたライブGitHubの例です。https : //github.com/cirosantilli/test-octopus-100k このスクリプトで生成されました。
トリビア
Linusは、60人を超える親とのコミットを好みません:https : //www.destroyallsoftware.com/blog/2017/the-biggest-and-weirdest-commits-in-linux-kernel-git-history
それは引っ張られて、それで問題ありませんが、「タコのマージは問題ありません」と「キリスト、それはタコではなく、クトゥルフのマージです」との間には明らかにバランスがあります。
Gitコミットオブジェクトの形式をご覧ください
その分析から、親リストのリストは、任意の改行で区切られたタイプのリストであることがわかります。
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