체리픽 작업 후 깃은 어떻게 합쳐집니까?
우리가 가지고 있는 것을 상상해 봅시다.master
분점.
그런 다음 다음 다음을 만듭니다.newbranch
git checkout -b newbranch
그리고 두 번의 새로운 약속을 합니다.newbranch
commit1과 commit2
그런 다음 마스터로 전환하여 제작합니다.cherry-pick
git checkout master
git cherry-pick hash_of_commit1
들여다보기gitk
우리는 commit1과 체리맛 버전이 서로 다른 해시를 가지고 있다는 것을 알 수 있습니다. 따라서 엄밀히 말하면 그들은 두 개의 다른 커밋입니다.
마침내 우리는 합쳐집니다.newbranch
안으로master
:
git merge newbranch
서로 다른 해시를 가진 이 두 커밋이 문제 없이 병합되었는지 확인합니다. 동일한 변경 사항을 두 번 적용해야 하므로 두 커밋 중 하나가 실패합니다.
Git는 정말로 커밋 내용을 현명하게 분석하는 동시에 변경 사항을 병합하여 두 번 적용해서는 안 된다고 결정하거나 이러한 커밋이 내부적으로 함께 연결된 것으로 표시됩니까?
단답형
걱정하지 마, 깃이 알아서 할 거야.
긴 대답
예를 들어 SVN과1 달리 Git는 커밋을 델타 형식으로 저장하지 않지만 스냅샷2,3 기반입니다.SVN은 각 병합된 커밋을 패치로 적용하려고 하지만(당신이 설명한 정확한 이유로 인해 실패함) Git는 일반적으로 이 시나리오를 처리할 수 있습니다.
병합할 때 Git는 두 HEAD 커밋의 스냅샷을 새 스냅샷으로 결합하려고 시도합니다.두 스냅샷에서 코드 또는 파일의 일부가 동일한 경우(즉, 커밋이 이미 체리로 선택되었기 때문에) Git은 해당 파일을 건드리지 않습니다.
원천
1 하위 버전의 델타 건너뛰기
2 깃 베이직스
3 Git 객체 모델
이러한 병합 후 역사에서 선택된 커밋이 두 번 있을 수 있습니다.
병합하기 전에 중복(체리 선택) 커밋이 있는 분기에 사용을 권장하는 문서에서 이 I 인용을 방지하는 솔루션:
git 체리 픽 후 git 병합: 중복 커밋 방지
마스터 브랜치와 브랜치 b가 있다고 가정해 보십시오.
o---X <-- master \ b1---b2---b3---b4 <-- b
지금 우리는 마스터에 커밋 b1과 b3가 급하게 필요하지만 나머지 커밋은 b에 필요하지 않습니다.그래서 우리가 하는 일은 마스터 브랜치와 체리픽 커밋 b1과 b3를 확인하는 것입니다.
$ git checkout master $ git cherry-pick "b1's SHA" $ git cherry-pick "b3's SHA"
결과는 다음과 같습니다.
o---X---b1'---b3' <-- master \ b1---b2---b3---b4 <-- b
마스터에 대해 다른 커밋을 수행하면 다음과 같은 결과를 얻을 수 있습니다.
o---X---b1'---b3'---Y <-- master \ b1---b2---b3---b4 <-- b
이제 분기 b를 마스터로 병합하면 다음과 같습니다.
$ git merge b
다음과 같은 정보를 얻을 수 있습니다.
o---X---b1'---b3'---Y--- M <-- master \ / b1----b2----b3----b4 <-- b
이것은 b1과 b3에 의해 도입된 변화가 역사에 두 번 나타날 것이라는 것을 의미합니다.병합 대신 기본 재배치를 방지하려면 다음을 수행합니다.
$ git rebase master b
이는 다음과 같습니다.
o---X---b1'---b3'---Y <-- master \ b2'---b4' <-- b
마지막으로:
$ git checkout master $ git merge b
제공:
o---X---b1'---b3'---Y---b2'---b4' <-- master, b
데이비드 레몬의 논평에 의해 추정된 수정 사항 편집
언급URL : https://stackoverflow.com/questions/14486122/how-does-git-merge-after-cherry-pick-work
'programing' 카테고리의 다른 글
스프레드시트에서 가장 일반적인 값과 해당 값의 발생 횟수를 출력하는 방법은 무엇입니까? (0) | 2023.07.04 |
---|---|
aspx 파일에서 네임스페이스를 추가하는 방법은 무엇입니까? (0) | 2023.07.04 |
다른 분기에서 변경 사항을 가져오는 방법 (0) | 2023.07.04 |
유형을 인덱스 유형으로 사용할 수 없습니다. (0) | 2023.07.04 |
루비: 범위 내에서, 그러나 세트 증분으로 반복하는 방법은 무엇입니까? (0) | 2023.07.04 |