최근에 나는 cherry-pick
커밋을 요청 받았다 .
git에서 커밋을 고르는 것은 무엇을 의미합니까? 어떻게합니까?
답변
Git에서의 체리 피킹은 한 지점에서 커밋을 선택하여 다른 지점에 적용하는 것을 의미합니다.
이 같은 다른 방법과는 대조적이다 merge
그리고 rebase
일반적으로 다른 지점에 많은 커밋을 적용합니다.
-
커밋을 적용하려는 지점에 있는지 확인하십시오.
git checkout master
-
다음을 실행하십시오.
git cherry-pick <commit-hash>
NB :
-
공공 지점에서 체리 픽을 선택하면
git cherry-pick -x <commit-hash>
표준화 된 커밋 메시지가 생성됩니다. 이런 식으로, 귀하 (및 동료)는 여전히 커밋의 출처를 추적 할 수 있으며 향후 병합 충돌을 피할 수 있습니다.
-
커밋에 첨부 된 메모가 있으면 체리 픽을 따르지 않습니다. 그것들을 가져 오려면 다음을 사용해야합니다.
git notes copy <from> <to>
추가 링크 :
답변
이 인용문은 다음과 같습니다.
Git을 사용한 버전 관리
(정말 훌륭한 책, git에 관심이 있다면 구입하는 것이 좋습니다)
편집 :이 답변은 여전히 인상적이기 때문에 액션 비디오 자습서에 대해 매우 훌륭하게 추가하고 싶습니다.
git cherry-pick 사용 git cherry-pick commit 명령은 현재 브랜치에서 명명 된 commit에 의해 도입 된 변경 사항을 적용합니다. 새롭고 뚜렷한 커밋을 소개합니다. 엄밀히 말하면, git cherry-pick을 사용한다고해서 리포지토리 내의 기존 기록이 변경되지는 않습니다. 대신 기록에 추가됩니다. diff를 적용하는 프로세스를 통해 변경 사항을 도입하는 다른 Git 작업과 마찬가지로 충돌을 해결하여 주어진 커밋의 변경 사항을 완전히 적용해야 할 수도 있습니다 . git cherry-pick 명령은 일반적으로 저장소 내의 한 분기에서 다른 분기로 특정 커밋을 도입하는 데 사용됩니다. 일반적으로 유지 보수 브랜치에서 개발 브랜치로 포워드 또는 백 포트 커밋을 사용합니다.
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above
전에:
후:
답변
Git에서의 체리 피킹은 한 지점에서 다른 지점으로 커밋을 적용하도록 설계되었습니다. 예를 들어 할 수 있습니다. 실수를하고 잘못된 지점으로 변경했지만 전체 지점을 병합하고 싶지는 않습니다. 당신은 예를 들어 할 수 있습니다. 커밋을 되돌리고 다른 지점에서 체리를 선택하십시오.
그것을 사용하기 위해서는 다른 분기의 커밋 해시가 필요한 git cherry-pick hash
곳 hash
이 필요합니다 .
전체 절차는 다음을 참조하십시오 : http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
답변
체리 픽이 필요한 상황의 짧은 예
다음 시나리오를 고려하십시오. 두 가지가 있습니다.
a) release1- 이 지점은 고객에게 제공되지만 여전히 해결해야 할 몇 가지 버그가 있습니다.
b)는 마스터 – 클래식 마스터 지점, 어디 당신이 할 수있는 release2에 대한 예를 들어 추가 기능에 대한.
지금 : 당신은 release1 에서 무언가를 고쳤습니다 . 물론 master 에서도이 수정이 필요합니다 . 그리고 그것은 체리 따기의 전형적인 유스 케이스입니다. 따라서이 시나리오에서 cherry pick은 release1 브랜치를 커밋 하여 마스터 브랜치에 포함시키는 것을 의미합니다 .
답변
cherry-pick은 Git 기능입니다. 누군가가 한 분기의 특정 커밋을 대상 분기에 커밋하려면 cherry-pick이 사용됩니다.
git cherry-pick 단계는 다음과 같습니다.
- 대상 지점을 체크 아웃 (전환)합니다.
-
git cherry-pick <commit id>
여기서 커밋 ID는 다른 지점의 활동 ID입니다.
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
- 목표 지점으로 미십시오
답변
나는 체리 픽 이 하는 단계적인 그림 과이 그림 의 애니메이션 (끝 근처)을 준비했습니다.
노트 :
커밋 L'
은 사용자의 관점에서 (커밋 = 스냅 샷) 커밋 의 정확한 사본입니다 L
.
기술적으로 (내부적으로), 그것은이다 , 새로운 다른이 (예를 들어,이 때문에 커밋 L
에 대한 포인터가 들어 K
부모 등을 (동안) L'
포인터에 포함되어 있습니다 E
).
답변
체리 픽이 리베이스와 비슷하거나 오히려 리베이스처럼 관리되는지 생각할 수 있습니다. 이것은 기존 커밋을 가져와 현재 지점의 헤드를 시작 지점으로 사용하여 다시 생성한다는 의미입니다.
A rebase
는 부모 X가있는 커밋을 가져 와서 실제로 부모 Y가있는 것처럼 커밋을 재생성합니다. 이것은 정확히 무엇입니까 cherry-pick
.
Cherry pick은 커밋을 선택하는 방법에 대한 자세한 내용입니다. pull
(rebase)를 사용하면 git은 브랜치로 가져온 것 위에 로컬 커밋을 암시 적으로 재생성하지만 cherry-pick
명시 적으로 커밋을 선택하고 현재 브랜치에서 암시 적으로 재생성합니다.
그래서 당신이하는 방식은 다르지만, 후드 아래에서 커밋의 재생과 매우 유사한 작업입니다.