etc./StackOverFlow

Git으로 커밋을 선택한다는 것은 무엇을 의미합니까?

청렴결백한 만능 재주꾼 2021. 11. 11. 07:58
반응형

질문자 :Rahul


최근에 커밋을 cherry-pick 하라는 요청을 받았습니다.

그렇다면 git에서 커밋을 선택한다는 것은 무엇을 의미합니까? 어떻게 합니까?



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

이것은 일반적으로 다른 분기에 많은 커밋을 적용하는 mergerebase 와 같은 다른 방법과 대조됩니다.

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

     git switch master
  2. 다음을 실행합니다.

     git cherry-pick <commit-hash>

주의:

  1. 공공 지점에서 선택하는 경우 다음을 사용하는 것을 고려해야 합니다.

     git cherry-pick -x <commit-hash>

    이것은 표준화된 커밋 메시지를 생성합니다. 이런 식으로 당신(그리고 당신의 동료)은 여전히 커밋의 출처를 추적할 수 있고 미래에 병합 충돌을 피할 수 있습니다.

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

     git notes copy <from> <to>

추가 링크:


Philip Fourie

이 인용문은 다음에서 가져왔습니다. Git으로 버전 관리 (정말 훌륭한 책, git에 관심이 있다면 구입하는 것이 좋습니다)

편집: 이 답변은 여전히 인상을 받고 있으므로 이에 대한 매우 멋진 실제 비디오 자습서를 추가하고 싶습니다.

유튜브: Git 체리픽 소개

git cherry-pick 사용 git cherry-pick commit 명령은 명명된 커밋에 의해 도입된 변경 사항을 현재 분기에 적용합니다. 새롭고 뚜렷한 커밋을 소개합니다. 엄밀히 말하면 git cherry-pick을 사용하면 저장소 내의 기존 기록이 변경되지 않습니다. 대신 역사에 추가됩니다. diff 적용 과정을 통해 변경 사항을 도입하는 다른 Git 작업과 마찬가지로 주어진 커밋의 변경 사항을 완전히 적용하려면 충돌을 해결해야 할 수도 있습니다 . git cherry-pick 명령은 일반적으로 저장소 내의 한 분기에서 다른 분기로 특정 커밋을 도입하는 데 사용됩니다. 일반적인 용도는 유지 관리 분기에서 개발 분기로 커밋을 전달 또는 백포트하는 것입니다.

 $ git checkout rel_2.3 $ git cherry-pick dev~2 # commit F, below

전에:~ 전에

후에:~ 후에


Teoman shipahi

Git의 체리 따기는 한 브랜치에서 다른 브랜치로 커밋을 적용하도록 설계되었습니다. 예를 들면 할 수 있습니다. 실수를 하여 잘못된 브랜치로 변경했지만 전체 브랜치를 병합하고 싶지 않습니다. 예를 들면 다음과 같습니다. 커밋을 되돌리고 다른 브랜치에서 체리 선택하십시오.

그것을 사용하려면 git cherry-pick hash . 여기서 hash 는 다른 브랜치의 커밋 해시입니다.

전체 절차는 다음을 참조하십시오. http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html


Tadeck

상황의 짧은 예, 체리 픽이 필요할 때

다음 시나리오를 고려하십시오. 두 개의 지점이 있습니다.

a) 릴리스1 - 이 분기는 고객에게 전달되지만 아직 수정해야 할 몇 가지 버그가 있습니다.

b) 마스터 - 예를 들어 릴리스2에 대한 기능을 추가할 수 있는 클래식 마스터 분기.

NOW : release1 에서 수정했습니다. 물론 master 에서도 이 수정 사항이 필요합니다. 그리고 이것은 체리 따기의 일반적인 사용 사례입니다. 따라서 이 시나리오에서 체리 픽은 release1 브랜치 에서 커밋을 가져와 마스터 브랜치에 포함하는 것을 의미합니다.


Daniel Perník

체리픽 이 하는 단계적인 일러스트레이션 과 이 일러스트레이션의 애니메이션을 준비했습니다 (마지막에 가깝습니다).

  1. 체리 따기 전
    (우리는 브랜치 feature 에서 커밋 L 을 선별할 것 입니다): 여기에 이미지 설명 입력

  1. git cherry-pick feature~2
    ( feature~2 는 이전의 두 번째 커밋입니다.
    feature , 즉 커밋 L ): 여기에 이미지 설명 입력

  1. 명령을 수행한 후( git cherry-pick feature~2 ): 여기에 이미지 설명 입력

같은 애니메이션: 여기에 이미지 설명 입력


메모:

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

기술적으로(내부적으로) 이것은 새롭고 다른 커밋입니다(예를 들어 L K 대한 포인터(부모) L' E 대한 포인터가 포함되어 있기 때문입니다.


MarianD

체리픽은 Git 기능입니다. 누군가 한 브랜치의 특정 커밋을 대상 브랜치에 커밋하려는 경우 체리 픽이 사용됩니다.
git cherry-pick 단계는 다음과 같습니다.

  1. 체크아웃(전환) 대상 분기.
  2.  git cherry-pick <commit id>

    여기서 commit id는 다른 브랜치의 액티비티 id입니다.

     git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
  3. 대상 브랜치로 푸시

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


Vijay S B

체리 픽이 리베이스와 비슷하거나 오히려 리베이스처럼 관리된다고 생각할 수 있습니다. 즉, 기존 커밋을 가져와 현재 있는 브랜치의 헤드를 시작점으로 하여 다시 생성한다는 뜻입니다.

rebase 는 부모 X가 있는 커밋을 가져와 실제로 부모 Y가 있는 것처럼 커밋을 재생성합니다. 이것이 바로 cherry-pick 이 하는 일입니다.

체리 픽은 커밋을 선택하는 방법에 관한 것입니다. pull (rebase)을 사용하면 git이 분기로 가져온 내용 위에 로컬 커밋을 암시적으로 재생성하지만, cherry-pick 하면 일부 커밋을 명시적으로 선택하고 현재 분기 위에 암시적으로 다시 생성합니다.

따라서 수행하는 방식은 다르지만 내부적으로는 커밋 재생성과 매우 유사한 작업입니다.


Hugh

현재 브랜치에 특정 커밋을 적용합니다.

이것은 다음을 의미합니다.

  • 이 커밋에 의해 추가된 모든 파일이 추가됩니다.
  • 이 커밋에 의해 삭제된 모든 파일이 삭제됩니다.
  • 이 커밋에 의해 수정된 모든 파일이 병합됩니다. 이것은 이 커밋 의 변경 사항 뿐만 아니라 커밋 의 전체 파일을 의미합니다!

예: 커밋 A 고려

 added newFileA modified main: + import './newFileA'

커밋 B

 added newFileB modified main: + import './newFileB'

다른 브랜치에서 커밋 B 를 선택하면 다음과 같이 됩니다.

 /newFileB /main : import './newFileA' import './newFileB'

커밋 B 에는 newFileBmain 이 포함되어 있지만 newFileA 는 포함되어 있지 않기 때문에 버그가 발생하므로 주의해서 사용하십시오.


mandelf

복사(어딘가에서) 및 붙여넣기(어딘가로)와 비슷하지만 특정 커밋에 대한 것입니다.

예를 들어 핫픽스를 수행하려는 경우 cherry-pick 기능을 사용할 수 있습니다.

개발 분기에서 cherry-pick 을 수행하고 해당 커밋을 릴리스 분기에 merge 마찬가지로 릴리스 분기에서 마스터 cherry-pick 을 수행하십시오. 짜잔


Ajeet Sharma

프로젝트에서 개발자 팀과 함께 작업할 때 여러 git 브랜치 간의 변경 사항을 관리하는 것은 복잡한 작업이 될 수 있습니다. 때로는 전체 분기를 다른 분기로 병합하고 싶지 않고 하나 또는 두 개의 특정 커밋만 선택하면 됩니다. 이 과정을 '체리 따기'라고 합니다.

체리 따기에 대한 훌륭한 기사를 찾았습니다. 자세한 내용은 https://www.previousnext.com.au/blog/intro-cherry-picking-git에서 확인하세요.


Wolfack

커밋 ID 없이 병합하려면 이 명령을 사용할 수 있습니다.

 git cherry-pick master~2 master~0

위의 명령은 마스터의 마지막 세 커밋을 1에서 3으로 병합합니다.

단일 커밋에 대해이 작업을 수행하려면 마지막 옵션을 제거하십시오.

 git cherry-pick master~2

이렇게하면 마스터 끝에서 세 번째 커밋을 병합합니다.


Bilal Saidumarov

공식 문서에서 발췌:

하나 이상의 기존 커밋이 주어지면 각 커밋이 도입하는 변경 사항을 적용하고 각각에 대한 새 커밋을 기록합니다. 이를 위해서는 작업 트리가 깨끗해야 합니다(HEAD 커밋에서 수정 사항 없음).

변경 사항을 적용하는 방법이 명확하지 않은 경우 다음이 발생합니다.

  1. 현재 분기 및 HEAD 포인터는 성공적으로 수행된 마지막 커밋에 유지됩니다.

  2. CHERRY_PICK_HEAD ref는 적용하기 어려운 변경 사항을 도입한 커밋을 가리키도록 설정됩니다.

  3. 변경 사항이 깔끔하게 적용된 경로는 인덱스 파일과 작업 트리 모두에서 업데이트됩니다.

  4. 충돌하는 경로의 경우 인덱스 파일은 git-merge의 "TRUE MERGE" 섹션에 설명된 대로 최대 세 가지 버전을 기록합니다. 작업 트리 파일에는 일반적인 충돌 표시자 <<<<<< 및 >>>>>>>로 묶인 충돌에 대한 설명이 포함됩니다.

다른 수정 사항은 없습니다.

더 읽기...


Saikat

출처 : http:www.stackoverflow.com/questions/9339429/what-does-cherry-picking-a-commit-with-git-mean

반응형