2017-09-28 15 views
2

지사와 하나의 지사가 있습니다. 기능/A라고 부르 자고합니다. 누군가가 리모콘을 개발할 때, 나는 그것을 잡아 당겨서/A를 찾아서 그것을 다시 개발하려고합니다. 이제 feature/B라는 새로운 브랜치를 만들고 feature/A에서 "상속"하고 일부 개발을하고 싶습니다. (필자는 feature/A의 코드가 feature/B가 필요합니다),하지만 필자는 필자의 feature/개발에. 연결된 지형지 물 지부 리셋

dev 
    | 
1----4 
\ 
    \---2--------3 
     |  | 
    f/A  f/B 

는 내가 개발에 기능/A를 리베이스 할 때 다시

dev 
    | 
1----4 
\ 
    \---2--------3 
     \  | 
     |  f/B 
     5 
     f/A 

내가 지금은 기능/B를 리베이스해야

dev  f/A 
    |  | 
1----4---2'---5' 
\ 
    \---2--------3 
    /  | 
    /  f/B 
    5 (commit without any assiciated branch that git will remove as trash after several days) 

을해야합니다/기능을 커밋합니다 지형지 물/오른쪽에? 리베이스 커밋 2와 3이 커밋 2를 오버라이드하고 5 '를 커밋 할 가능성이 있습니까? 내 기능/B에서 다시 올드 코드가 생깁니 까?

내가 rebase는 매우 유연한 명령입니다 ... 내 기능/B

+0

리베이스 커밋 중에 커밋 2가 커밋 2를 오버라이드하고 이전 코드가 생길 것이라고 걱정됩니다. 일어날 수 있습니까? – Aram810

+0

내가 featude/B에서 feature/A의 코드가 필요하지만, feature/A를 개발할 수는 없습니다. 즉, 내 feature/A는 항상 feature/A로부터의 종속성을 가지고 있습니다. – Aram810

+1

대화 형 rebase를 수행하고 커밋 2를 건너 뛰거나 커밋 2를 오버라이드하지 않는 방법으로 충돌을 해결합니다. ' –

답변

0

음 5 변경 사항을 적용해야한다는 것을 잊지 마십시오. 그것은 많은 일을 할 수 있습니다, 그래서 진짜 질문은 그것이 당신이 의미하는 바를 정확하게 행하는 방법입니다.

그래서 당신이

1 -- 4 <--(dev) 
\ \ 
    \ 2' -- 5' <--(A) 
    \ 
    2 -- 3 <--(B) 

방법 AB을 리베이스해야 할 때 관심의 포인트는 것 같다. (이 점에 대한 추가 정보는 중요하지 않지만 현재 커밋 그래프에만 초점을 맞출 수 있습니다. 5도 여기에 별다른 영향을 미치지 않습니다.)

2 어떤 식 으로든 2'을 무시할 수 있습니다 ... 거기에는 우려가 없습니다. 리베이스하는 브랜치가 B이면 A이며 그 히스토리는 영향을받지 않습니다.

2B의 기록이지만 A의 기록은없는 것입니다. 이 22'과 동일한 텍스트 변경을 적용 할 것으로 예상하므로 조건부 리베이스가 감지하므로이 문제가되어서는 안됩니다. 그러나 A을 리베이스 할 때 충돌 해결이 있거나 다른 가능성은 더 희박 할 수 있습니다. 패치 비교가 엉망이 될 수도 있습니다. 그 수단이 무엇

, 당신 단지

git rebase A B 

소스 커밋으로 23이 확인 될 커밋 말할 수 있어야하지만 2 희망 2'의 중복으로 발견하고 폐기 할 것 . 3'는 그 자식이 2을 재생하려고 할 때 그때는 아마 충돌을 볼 수 있습니다 실패하면

1 -- 4 <--(dev) 
     \ 
     2' -- 5' <--(A) 
       \ 
       3' <--(B) 

을 산출 5 위에 (2을 기준으로) 3에서 변경 사항을 적용하기 위해 만든 것입니다. 그 시점에서 rebase를 중단합니다.

(나는이 일이 얼마나 볼 수 있지만, REBASE이 성공적으로 아직 완료 한 경우 그 잘못을 다시 복사 변화를 2에서, 당신은 아직도 그것을 백업 할 수 있습니다 것을 발견, 사용

git checkout B 
git reset --hard [email protected]{1} 

가 REBASE을 취소 할 수 있습니다.)

당신이 중 하나 REBASE를 중단하거나 취소 한 경우, "플랜 B"가 될 것

git rebase --onto A 2 B 

2은 커밋 2 (예 : 해당 SHA ID 또는 B^ 등)을 나타내는 식입니다. 이렇게하면 (2은 업스트림이므로) 3만이 재 작성 후보 확약으로 간주되지만 여전히 5으로 재생을 수행합니다.