2011-12-21 3 views
3

나는 master /와 1.7 /에 2 개의 브랜치를 가지고 있습니다. 나는 체리 피크를 사용하여 마스터/1.7 /로 수정했다. (나는 단지 일부 변경을 원하기 때문에 병합 사용하지 않는.) :master에서 branch로 cherry-pick 할 때 반복 커밋을 피한 다음 분기에서 master로 다시 병합하십시오.

$ git checkout 1.7 
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA> 

을 그리고 나중에, 나는, 마스터/1.7/다시 병합 나는에 갔다 모든 변경 사항을 원하기 때문에 1.7/(다시 메인 라인에 병합하는) 벚꽃-종목의 themeselves 제외 :

$ git checkout master 
$ git merge 1.7 

내 문제는이 다시 마스터 /로)/원래 마스터에서 (체리 - 픽 재 - 커밋이다 :

$ git log --oneline 
8ecfe22 Merge branch '1.7' 
fe3a60d master change 2 (cherry picked from commit f5cca9296e45d5965a552c45551157ba 
9c25f53 master change 1 (cherry picked from commit 8fae2a68a356f5b89faa8629b9a23b23 
f5cca92 master change 2 
8fae2a6 master change 1 
ffa10bf initial commit 

내 진짜로 심지어 그것은 병합 충돌을 일으켰다.

내 질문은 그렇습니다. 그렇다면 어떻게해야합니까? 당신이 빨리 감기 옵션 -ff을 사용하지 않는

$ git init 
<create Dialog.js file> 
$ git add Dialog.js 
$ git commit -am "initial commit" 
$ git branch 1.7 

<edit Dialog.js file> 
$ git commit -am "master change 1" 
<edit Dialog.js file> 
$ git commit -am "master change 2" 
$ git log 

$ git checkout 1.7 
$ git cherry-pick -x <initial commit SHA>..<master change 2 SHA> 

$ git checkout master 
$ git merge 1.7 
$ git log 

답변

2

당신이 벚꽃의 선택, 당신은 새로운 커밋을 만들 때와 다시 병합 할 때, 자식은에 있습니다

명령의 전체 목록은이 문제를 재현하는 그 커밋을 효과적으로 병합 할 수는 있지만 커밋을 병합하십시오.

Rebase 현재 대신 병합, 여기에 당신을 도울 수 있습니다. (필요한 경우) 분기를 병합, 이제 다음

git rebase master 1.7 

당신이 작은 변화를 얻을 할 때

체리 - 선택은 가장 사용 당신이 다른 방식으로 폐기하는 지점에서. 워크 플로우는 필요에 따라 병합 또는 리베이스를 기반으로해야합니다.

+0

그래, 나는 rebase가 작동한다고 상상할 수 있지만, git 커뮤니티에서는 브랜치에서 리베이스를 호출하는 것이 필사적 인 죄라고 간주됩니다. 다른 접근 방법이 있습니까? "git merge"를 사용하여 변경 사항을 master/1.7에서 /로 옮길 수 있습니까? rebase -i와 유사한 -i 옵션과 비슷합니까? 그리고 내가 그 일을한다면, 마스터로부터 어떤 변화가 왔는지 나중에 기억할 것입니다. 나중에 마스터로 다시 병합하려고하지 않겠습니까? –

+0

죄송합니다. 위의 "공용 * 지점에 rebase를 호출하는 것은 필사적 인 죄로 간주됩니다"라는 의미입니다. –

관련 문제