변경 사항 선택하기
GitLab 14.0에서 삭제된 피처 플래그
pick_into_project.
Git에서 cherry-picking은 한 브랜치에서 단일 커밋을 가져와 다른 브랜치의 최신 커밋으로 추가하는 것을 의미합니다. 소스 브랜치의 나머지 커밋은 대상에 추가되지 않습니다. 한 번에 전체 브랜치의 내용이 아닌 단일 커밋의 내용이 필요할 때 커밋을 cherry-pick합니다. 예를 들어,
- 기본 브랜치에서 이전 릴리스 브랜치로 버그 수정을 백포트합니다.
 - 포크에서 변경 사항을 상위 리포지터리로 복사합니다.
 
GitLab UI를 사용하여 프로젝트 또는 프로젝트 포크에서 단일 커밋이나 전체 Merge Request의 내용을 cherry-pick할 수 있습니다.
이 예시에서 Git 리포지터리에는 develop와 main 두 개의 브랜치가 있습니다. 커밋 B는 main 브랜치의 커밋 E 이후에 develop 브랜치에서 cherry-pick됩니다. 커밋 G는 cherry-pick 이후에 추가됩니다:
Merge Request에서 모든 변경 사항을 cherry-pick
Merge Request이 Merge된 후, 해당 Merge Request에 의해 도입된 모든 변경 사항을 cherry-pick할 수 있습니다. Merge Request은 상위 프로젝트 또는 하류 포크에 있을 수 있습니다.
준비 사항:
- 리포지터리에 코드를 추가하고 Merge Request을 편집할 수 있는 프로젝트 내 역할이 있어야 합니다.
 - 
프로젝트에서 Merge 방법은 Merge 커밋을 사용해야 합니다. 이는 프로젝트의 설정 > Merge Request에서 설정됩니다.
GitLab 16.9 이후에는 일반적으로 올라가는 커밋이 스쿼시되거나 Merge Request이 단일 커밋을 포함하는 경우에만 GitLab UI에서 커밋을 cherry-pick할 수 있습니다. 언제든지 단일 커밋을 cherry-pick할 수 있습니다.
 
다음을 수행하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
 - 코드 > Merge Request을 선택하고 Merge Request을 찾습니다.
 - Merge Request 보고서 섹션으로 스크롤하고 Merge자 보고서를 찾습니다.
 - 
보고서의 우측 상단에서 Cherry-pick을 선택합니다:
 - 대화상자에서 cherry-pick할 프로젝트 및 브랜치를 선택합니다.
 - 선택 사항: 이 변경 사항으로 새 Merge Request 시작을 선택합니다.
 - Cherry-pick을 선택합니다.
 
단일 커밋 cherry-pick
GitLab 프로젝트에서 다양한 위치에서 단일 커밋을 cherry-pick할 수 있습니다.
프로젝트의 커밋 디렉터리에서
프로젝트의 모든 커밋 디렉터리에서 커밋을 cherry-pick하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
 - 코드 > 커밋을 선택합니다.
 - cherry-pick하려는 커밋의 제목을 선택합니다.
 - 우측 상단에서 옵션 > Cherry-pick을 선택합니다.
 - cherry-pick 대화상자에서 cherry-pick할 프로젝트와 브랜치를 선택합니다.
 - 선택 사항: 이 변경 사항으로 새 Merge Request 시작을 선택합니다.
 - Cherry-pick을 선택합니다.
 
리포지터리의 파일 보기에서
프로젝트의 Git 리포지터리에서 개별 파일에 영향을 미치는 이전 커밋 디렉터리에서 cherry-pick할 수 있습니다.
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
 - 코드 > 리포지터리를 선택합니다.
 - 커밋에 의해 변경된 파일로 이동합니다. 우측 상단에서 History를 선택합니다.
 - cherry-pick하려는 커밋의 제목을 선택합니다.
 - 우측 상단에서 옵션 > Cherry-pick을 선택합니다.
 - cherry-pick 대화상자에서 cherry-pick할 프로젝트와 브랜치를 선택합니다.
 - 선택 사항: 이 변경 사항으로 새 Merge Request 시작을 선택합니다.
 - Cherry-pick을 선택합니다.
 
명령줄에서
git 명령줄 인터페이스를 사용하여 한 브랜치에서 다른 브랜치로 커밋을 cherry-pick할 수 있습니다.
이 예에서는 브랜치 feature에서 다른 브랜치 develop로 커밋을 cherry-pick합니다.
- 
기본 브랜치를 체크아웃한 다음, 해당 브랜치를 기반으로 새로운
develop브랜치를 체크아웃합니다:git checkout main git checkout -b develop - 
다시 feature 브랜치로 변경합니다:
git checkout feature - 
변경 사항을 가하고 커밋합니다:
git add changed_file.rb git commit -m 'Fix bugs in changed_file.rb' - 
커밋 로그를 표시합니다:
$ git log commit 0000011111222223333344444555556666677777 Merge: 88888999999 aaaaabbbbbb Author: user@example.com Date: Tue Aug 31 21:19:41 2021 +0000 - 
commit줄을 식별하고 해당 줄의 문자열을 복사합니다. 이 정보는 커밋의 SHA(Secure Hash Algorithm)입니다. SHA는 해당 커밋의 고유 식별자이며 이후 단계에서 필요합니다. - 
이제 SHA를 알고 있으므로 다시
develop브랜치를 체크아웃합니다:git checkout develop - 
develop브랜치로 커밋을 cherry-pick하고SHA를 커밋 SHA로 변경합니다:git cherry-pick SHA 
cherry-pick된 커밋에 대한 시스템 노트 보기
GitLab UI 또는 API에서 Merge 커밋을 cherry-pick할 때 GitLab은 관련된 Merge Request 스레드에 시스템 노트를 추가합니다. 형식은 [USER] 가 변경 내용을 브랜치 [BRANCHNAME] 에 커밋 [SHA] [DATE] 로 픽했습니다.:
시스템 노트는 새로운 커밋과 기존의 Merge Request을 서로 연결합니다. 각 배포의 관련 Merge Request 디렉터리에는 cherry-pick된 Merge 커밋이 포함됩니다.
GitLab UI 또는 API 외부에서 cherry-pick된 커밋은 시스템 노트를 추가하지 않습니다.
관련 주제
문제 해결
cherry-pick 시 다른 부모 커밋 선택하기
GitLab UI에서 Merge 커밋을 cherry-pick할 때 메인 라인은 항상 첫 번째 부모입니다. 명령줄을 사용하여 다른 메인 라인으로 cherry-pick하세요.
다음은 두 번째 부모를 메인 라인으로 사용하여 Merge 커밋을 cherry-pick하는 간단한 예제입니다:
git cherry-pick -m 2 7a39eb0


도움말