피쳐 브랜치를 다른 피쳐 브랜치로 리베이스


304

작업중 인 두 개의 (개인) 기능 지점이 있습니다.

a -- b -- c                  <-- Master
     \     \
      \     d -- e           <-- Branch1
       \
        f -- g               <-- Branch2

이 지점에서 약간의 작업을 한 후에 Branch1의 Branch2에서 변경이 필요하다는 것을 알았습니다. Branch2의 변경 사항을 Branch1로 리베이스하고 싶습니다. 나는 다음과 같이 끝내고 싶다 :

a -- b -- c                  <-- Master
           \
            d -- e -- f -- g <-- Branch1

두 번째 분기 첫 번째 분기 리베이스해야한다고 확신 하지만 올바른 구문과 체크 아웃 해야하는 분기에 대해 완전히 확신하지 못합니다.

이 명령으로 원하는 결과를 얻을 수 있습니까?

(Branch1)$ git rebase --onto Branch1 Branch2

11
귀하의 질문에 대답하기 위해 테스트 리포지토리를 생성하고 커밋 구조를 만든 다음 표시된 명령을 시도해 봅니다. 그러나 나는 당신이 그것을 스스로 할 수 있다고 생각하므로 그렇게하지 않을 것입니다 :)
Daniel Hilgarth

3
감사. 나는 내가 이것을 쉽게 스스로 테스트 할 수 있도록 나에게 일어나지 않았기 때문에 처음에 이것을 올바르게 구부렸다. :-)
Arjen

4
나는 그렇게 생각했기 때문에 그 의견을 게시했습니다. 또는 실제 저장소의 사본을 작성하고 사본에서 테스트를 수행합니다.
Daniel Hilgarth

참고 : Git 2.0에는 이러한 종류의 리베이스에 대한 바로 가기가 도입됩니다 git rebase -. 아래 내 답변을
VonC

5
사소한 참고 : 여기에 대한 답변은 branch2를 결과로 제공합니다. OP는 지점 1을 원했습니다. 아니면 뭔가를 놓쳤습니까?
Josef.B

답변:


353
  1. Branch2로 전환

    git checkout Branch2
    
  2. Branch2에 머무르면서 Branch1 변경 사항 위에 현재 (지점 2) 변경 사항을 적용하십시오.

    git rebase Branch1
    

Branch2에서 원하는 결과를 얻을 수 있습니다.

a -- b -- c                      <-- Master
           \
            d -- e               <-- Branch1
           \
            d -- e -- f' -- g'   <-- Branch2

Branch1을 삭제할 수 있습니다.


감사! rebasing 후 분기를 삭제할 때 분기가 완전히 병합되지 않았다는 메시지가 나타납니다. 이 메시지를 무시하고 강제로 삭제할 수 있다고 가정합니다.
Arjen

10
그는 Branch1에서 모든 변경을 원치 않았습니까?
tomasz_kusmierczyk

6
이것은 그가 원하는 것과 반대되는 것 같습니다.
1252748

1
사실, @tomasz_kusmierczyk와 @ 1252748 그리고 나 자신도 혼란스러워했습니다. 그러나 git rebaseBranch1에 머무르는 동안 수행 하면 Branch1의 변경 사항이 Branch2에서 복사 된 항목 위에 있도록 Branch1 기록이 다시 작성됩니다. 그러면 다음 커밋 순서가 발생 a - b - f - g - c' - d' - e'합니다.
eel ghEEz

1
@ tomasz_kusmierczyk 및 1252748, 이것은 그가 원하는 것과 반대가 아닙니다. 이것은 그가 원하는 것입니다. 지점 이름은 중요하지 않으며 언제든지 변경할 수 있습니다.
a3y3

56

참고 : 켜져있는 경우 Branch1Git 2.0 (Q2 2014)을 사용하여 다음을 입력 할 수 있습니다.

git checkout Branch2
git rebase -

참조 4f40740 커밋 에 의해 브라이언 Gesiakmodocache :

rebase: -이전 분기의 " "속기 허용

가르치고 현재 지사에 지사 checkout와 같은 속기 merge를 사용 rebase하십시오. 즉, " -"는 "이전에 있었던 지점"을 의미합니다.


26
좋지만 약간 위험합니다. 때로는 자세한 표현이 이깁니다. 그러나 다시, 나는 또한 자바를 좋아한다 ... (-:
sthzg

3

나는 당신이 Rebase에게 요청한 것을 알고 있지만 대신 Branch2에서 Branch1로 옮기고 싶은 커밋을 Cherry-Pick합니다. 그렇게하면 마스터에서 어떤 브랜치를 만들 었는지 신경 쓸 필요가 없으며 병합을 더 잘 제어 할 수 있습니다.

a -- b -- c                  <-- Master
     \     \
      \     d -- e -- f -- g <-- Branch1 (Cherry-Pick f & g)
       \
        f -- g               <-- Branch2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.