나는 두 개의 가지 : A
과 B
을 가지고 있습니다.git cherry-pick은 커밋의 diff를 선택하지 않습니다.
A
의 커밋 내역 :a <- b <- c
;B
님의 커밋 내역 :a <- h <- i
;
여기에는 파일이 하나만 있다고 가정합니다.
- 커밋
b
에서 "foo"와 같은 텍스트를 추가합니다. - 커밋
c
에서 "bar"와 같은 텍스트를 추가합니다. - 그러면
git cherry-pick c
의B
분기입니다. 나는cherry-pick
이 지점에c
의 변경 사항만을 고를 것이라고 생각했습니다. 그러나 지점B
에foo
과bar
이 모두 추가됩니다. 나는 분명히 내가 원하는 바가 아니다. 따라서
, cherry-pick
는 조상 a
커밋 이후에 c
를 저지 만진 해당 파일의 모든 변경 사항을 선택합니다. 그게 맞습니까? b
에서 c
까지 diff를 선택하여 i
에 적용하려면 어떻게해야하나요?
업데이트 정확한 단계
- 초기화 자식의 REPO;
test.txt
파일을 추가하고 첫 번째 커밋init commit
을 발행하십시오.test.txt
는 지금 :first line second line
은 새로운 지점
dev
를 작성하지만, 지점master
에 머물;added in commit b
을 파일에 추가하고 커밋b
을 발행하십시오.test.txt
는 지금 :first line added in commit b second line
파일에
added in commit c
을 추가하고이c
커밋 실행합니다.test.txt
는 지금 :first line added in commit b added in commit c second line
체크 아웃
dev
지점과h
커밋 실행합니다.test.txt
는 지금 : 체리 선택에first line second line adding by commit h
git cherry-pick <commit c SHA1 ID>
이h
커밋에c
을 커밋합니다.충돌 메시지 :
index 6a8dc57,594c6ec..0000000 @@@ -1,4 -1,4 +1,9 @@@ first line ++<<<<<<< HEAD ++======= + added in commit b + added in commit c ++>>>>>>> 06ce9b1... commit c adding another line second line + +adding by commit h
참조?
cherry-pick
도 변경 내용을b
에서 가져옵니다.
고마워요!
이 당신에게 도움이 될 수 HTTP : 당신이 충돌이있을 때, 당신은 적어도 당신의 B.
여기가 충돌없이 작동 할 방법을 저지하는 것은의 일부입니다 충돌하는 상황의 일부를 얻을 //stackoverflow.com/questions/9339429/what-does-cherry-picking-a-commit-with-git-mean –
@ArunG 감사합니다! 나는 체리 피크가 무엇을 의미하는지 안다. 그러나 나는 그 커밋의 diff를 얻고 diff를 타겟 브랜치에 적용하는 것과 같지 않다는 것을 혼란스러워한다. 또한 커밋에 ** ** ** 내용이 포함되어 있습니다. – tamlok
@tamlok, 커밋'b'에서 델타를 얻는 이유를 확인하기 위해 커밋이 실제로 적용될 변경 사항을 조사하기 위해'git show a' ('a'를 관련 커밋 SHA로 바꾸십시오)를 실행하십시오. '-n' 플래그로 항상'cherry-pick'을 실행하여 원하지 않는 변경 사항을 중지하고 수동으로 제거 할 수 있습니다. – miqid