태그 보관물: cherry-pick

cherry-pick

Git으로 커밋을 고르는 것은 무엇을 의미합니까? 요청 받았다 . git에서 커밋을 고르는 것은 무엇을

최근에 나는 cherry-pick커밋을 요청 받았다 .

git에서 커밋을 고르는 것은 무엇을 의미합니까? 어떻게합니까?



답변

Git에서의 체리 피킹은 한 지점에서 커밋을 선택하여 다른 지점에 적용하는 것을 의미합니다.

이 같은 다른 방법과는 대조적이다 merge그리고 rebase일반적으로 다른 지점에 많은 커밋을 적용합니다.

  1. 커밋을 적용하려는 지점에 있는지 확인하십시오.

    git checkout master
    
  2. 다음을 실행하십시오.

    git cherry-pick <commit-hash>
    

NB :

  1. 공공 지점에서 체리 픽을 선택하면

    git cherry-pick -x <commit-hash>
    

    표준화 된 커밋 메시지가 생성됩니다. 이런 식으로, 귀하 (및 동료)는 여전히 커밋의 출처를 추적 할 수 있으며 향후 병합 충돌을 피할 수 있습니다.

  2. 커밋에 첨부 된 메모가 있으면 체리 픽을 따르지 않습니다. 그것들을 가져 오려면 다음을 사용해야합니다.

    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 hashhash이 필요합니다 .

전체 절차는 다음을 참조하십시오 : 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 단계는 다음과 같습니다.

  1. 대상 지점을 체크 아웃 (전환)합니다.
  2. git cherry-pick <commit id>
    

    여기서 커밋 ID는 다른 지점의 활동 ID입니다.

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
    
  3. 목표 지점으로 미십시오

https://git-scm.com/docs/git-cherry-pick 방문


답변

나는 체리 픽 이 하는 단계적인 그림 과이 그림애니메이션 (끝 근처)을 준비했습니다.

  1. 체리 따기 전에
    (우리는 지점 에서 커밋에 대한 체리 따기 를 할 것입니다 ) :
    Lfeature

  1. 명령 시작 git cherry-pick feature~2
    ( 이전 feature~2의 두 번째 커밋
    feature, 즉 commit L) :

  1. 명령을 수행 한 후 ( git cherry-pick feature~2) :

같은 애니메이션 :


노트 :

커밋 L'사용자의 관점에서 (커밋 = 스냅 샷) 커밋 의 정확한 사본입니다 L.

기술적으로 (내부적으로), 그것은이다 , 새로운 다른이 (예를 들어,이 때문에 커밋 L에 대한 포인터가 들어 K부모 등을 (동안) L'포인터에 포함되어 있습니다 E).


답변

체리 픽이 리베이스와 비슷하거나 오히려 리베이스처럼 관리되는지 생각할 수 있습니다. 이것은 기존 커밋을 가져와 현재 지점의 헤드를 시작 지점으로 사용하여 다시 생성한다는 의미입니다.

A rebase는 부모 X가있는 커밋을 가져 와서 실제로 부모 Y가있는 것처럼 커밋을 재생성합니다. 이것은 정확히 무엇입니까 cherry-pick.

Cherry pick은 커밋을 선택하는 방법에 대한 자세한 내용입니다. pull(rebase)를 사용하면 git은 브랜치로 가져온 것 위에 로컬 커밋을 암시 적으로 재생성하지만 cherry-pick명시 적으로 커밋을 선택하고 현재 브랜치에서 암시 적으로 재생성합니다.

그래서 당신이하는 방식은 다르지만, 후드 아래에서 커밋의 재생과 매우 유사한 작업입니다.