[git] Git에서 특정 커밋을 한 브랜치에서 다른 브랜치로 병합하는 방법은 무엇입니까?

나는 BranchA113 커밋보다 앞서 BranchB있습니다.

그러나 지난 10 개 정도의 커밋이에 BranchA병합 되기를 원합니다 BranchB.

이것을 할 수있는 방법이 있습니까?



답변

git cherry-pick <commit>명령을 사용하면 분기에 관계없이 단일 커밋을 수행하고 기본적으로 작업 분기에서 리밋 할 수 있습니다.

Pro Git 책의 5 장 에서는 다이어그램과 함께 완성 할 수있는 것보다 더 잘 설명합니다 . ( 저음에 관한 장도 잘 읽습니다.)

마지막으로, 다른 SO 질문에서 체리 따기 대 병합 대 rebasing에 대한 좋은 의견 이 있습니다 .


답변

BranchA 원격으로 밀어되지 않은 경우에 당신은 사용하여 커밋 순서를 변경할 수 있습니다 rebase간단히하고 merge. 중복 커밋을 만들지 않기 때문에 가능 하면 mergeover 를 사용 하는 것이 좋습니다 rebase.

git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]


답변

출처 : https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

도입 된 작품을 한 지점에서 다른 지점으로 옮기는 다른 방법은 체리 픽을하는 것입니다. Git의 체리 픽은 단일 커밋에 대한 리베이스와 같습니다. 커밋에 도입 된 패치를 가져 와서 현재있는 지점에 다시 적용하려고합니다. 토픽 브랜치에 많은 커밋이 있고 그 중 하나만 통합하려는 경우 또는 토픽 브랜치에 하나의 커밋 만 있고 리베이스를 실행하는 대신 체리 픽을 선호하는 경우에 유용합니다. 예를 들어, 다음과 같은 프로젝트가 있다고 가정하십시오.

여기에 이미지 설명을 입력하십시오

커밋 e43a6을 마스터 브랜치로 가져 오려면 다음을 실행하십시오.

$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
 3 files changed, 17 insertions(+), 3 deletions(-)

이는 e43a6에 도입 된 것과 동일한 변경 사항을 가져 오지만 적용 날짜가 다르기 때문에 새로운 커밋 SHA-1 값을 얻게됩니다. 이제 당신의 역사는 다음과 같습니다 :

여기에 이미지 설명을 입력하십시오

이제 토픽 브랜치를 제거하고 원하지 않는 커밋을 제거 할 수 있습니다.


답변