주요 답변 은 특정 커밋에서 현재 분기로 변경 사항 을 적용하는 방법을 설명합니다 . 그것이 "병합 방법"의 의미라면 체리 픽을 사용하십시오.
그러나 실제로 병합 을 원한다면, 즉 현재 브랜치의 기존 커밋과 변경 사항을 적용 하려는 커밋 과 같은 두 부모와 의 새로운 커밋을 원한다면 체리 픽은 그것을 달성하지 못합니다.
예를 들어 빌드 프로세스에서 자식 태그를 사용하여 최신 태그를 기반으로 버전 문자열을 자동으로 설정하는 경우 (예 :) 실제 병합 기록을 갖는 것이 바람직 할 수 있습니다 git describe
.
cherry-pick 대신 actual을 수행 한 git merge --no-commit
다음 원하지 않는 변경 사항을 제거하기 위해 인덱스를 수동으로 조정할 수 있습니다.
브랜치에 A
있고 브랜치 끝에 커밋을 병합하려고 한다고 가정하십시오 B
.
git checkout A
git merge --no-commit B
이제 두 개의 부모, 현재 팁 커밋 A
및 의 커밋을 만들도록 설정했습니다 B
. 그러나 B 브랜치에서 이전 커밋의 변경 사항을 포함하여 원하는 것보다 더 많은 변경 사항이 적용될 수 있습니다. 원치 않는 변경 사항을 취소 한 다음 커밋해야합니다.
(작업 디렉토리의 상태와 색인을 병합하기 전의 상태로 다시 설정하는 쉬운 방법이있을 수 있으므로 처음에 원하는 커밋을 선택하기위한 슬레이트가 깨끗합니다. 나는 깨끗한 상태를 달성하는 방법을 모르겠어요. git checkout HEAD
그리고 git reset HEAD
모두이 방법의 목적을 물리 치고, 병합 상태를 제거 할 것이다.)
따라서 원치 않는 변경 사항을 수동으로 취소하십시오. 예를 들어
git revert --no-commit 012ea56
원치 않는 커밋마다 012ea56
.
조정이 끝나면 커밋을 만듭니다.
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
이제 원하는 변경 사항 만 있고 조상 트리에 기술적으로 B에서 병합했음을 표시합니다.