Answers:
您可以使用git merge将多个提交合并到当前分支中。来自man git-merge
(或git help merge
):
git-merge-将两个或多个开发历史结合在一起
当您这样做时,将导致与两个以上父母的承诺。
是的,十万个父母呢?
这是一个实时GitHub示例,其中包含10万次提交的合并: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
合并时,您可以指定多个分支。
例如:
git merge branch_A branch_B branch_C [...]
然后提交有更多的父母。