답변:
git merge를 사용하여 하나 이상의 커밋을 현재 브랜치에 병합 할 수 있습니다. 부터 man git-merge
(또는 git help merge
) :
git-merge-둘 이상의 개발 히스토리에 참여
그렇게하면 두 명 이상의 부모와 결심하게됩니다.
네, 부모님은 어떻습니까?
다음은 100k 커밋을 병합 한 라이브 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