2017-04-06 4 views
3

의 우리가 같은 분기 구조가 있다고 가정 해 보자, 내가 정말 기능의 하위 작업으로 분기되어되어하는의해야 결정 기능 (1)에 대한 작업을 수행 한 후변경 힘내 학부모 지점

develop -> --- a --- b --- c 
        \   \ 
feature 1 ->  \   --- d --- e 
        \  
feature 2 ->   --- f --- g 

을 2

기능 1이 개발 분기를 '실행 취소'하고 커밋을 유지하면서 기능 2를 대신 분기 할 수 있습니까?

예 :

develop -> --- a --- b --- c  
        \  
feature 1 ->  \   --- d --- e 
        \  /
feature 2 ->   f --- g 
+1

이 경우 리베이스가 작동하지 않습니다. 이렇게 할 수 있습니다 : '''git checkout g; git cherry-pick e ~ 2..e''' – eftshift0

+2

idea2는 feature2에서 branch를 구성하고, cherrypick은 d와 e를 커밋합니다. 'feature1'을 제거하고'feature1b'를'feature1'로 개명하십시오. –

답변

3

가장 간단한 해결책은 --onto와 리베이스 사용하는 것 플래그는 Git book에 설명되어 있습니다. 명령 :

git rebase --onto feature2 develop feature1 

feature2 위에 develop에없는 feature1에서 커밋을 리베이스됩니다.

0

는 일반적으로 당신이 이런 종류의에 대한 git rebase 볼 것이다, 그러나 feature2 위에 feature1에서 REBASE이 커밋은 b와 c가 포함 것이기 때문에 그렇게하지하는 일 없을거야 필요.

윌렘의 제안은 cherry-pick을 사용하는 것이 좋습니다.

새로운 지점 만들기 :

git checkout -b feature1b feature1 

체리 내가 말하는 "feature1의 마지막 두 커밋"하고 관심있는 커밋 (여기 선택하지만,하지만 당신은 등 실제 커밋 ID를 사용하여 커밋의 범위를 지정할 수를) :

git cherry-pick feature1~2..feature1 

이 시점에서 지점 feature1b은 원하는 기록과 일치합니다. 당신은 당신의 필요에 따라 몇 가지 선택 사항 정리 작업을 수행 할 수 있습니다

git branch -D feature1 

은 새로운 지점의 이름을 바꿉니다 :

은 이전 분기를 삭제

git branch -m feature1 
+0

'git rebase --onto feature2 development feature1'는 한 단계에서 그것을 할 것입니다. 그러나 이것은 특히 혼란 스럽습니다. :-) – torek