2012-09-10 2 views
29

저는 master에서 두 번째 브랜치를 만들지 않고 실수로 다른 지사에서 하나의 지사를 만든 동료를 도우려고합니다. 여기에 내가 생각자식 분기를 두 개의 분기로 분할 했습니까?

Master ---A---B---C 
        |\ 
      Foo | E---F---F---H 
        | 
      Bar J---K---L---M 

한 가지 방법은 FooV2 및 BarV2 지점을 만들 수 있으며, cherry- 것입니다 ... 우리가 지금 가지고있는 본질적

Master ---A---B---C 
        \ 
       Foo E---F---F---H 
           \ 
          Bar J---K---L---M 

입니다 그리고 여기에 우리가하고 싶은 것입니다 개별 커밋을 적절한 V2 가지로 선택하십시오. 그러나 나는이 상황을 처리하는 더 좋은 방법이 있을까?

답변

12

그것은 당신이 할 수처럼 나에게 같습니다

git checkout J 
git rebase master 

편집 :

내가 제안하고 그것이 작동하지 않는 것을 시도했다. knittl의 제안 (내 상자에) 작동하지 않습니다. 다음은 나를 위해 일을 무슨 짓을했는지 : 우리가 그냥 "이 명령을 실행"보다 약간 더 나은 일을 이해하는 데 도움이됩니다 더 일반적인 대답을

git rebase --onto master foo bar 
+2

고맙습니다. 편집 된 버전은 훌륭하게 작동했습니다. 누구든지이 문제에 대해 더 자세히 알고 싶다면 Pro Git 서적의 "Reynolds Rebase"섹션을 참조하십시오. http://git-scm.com/book/en/Git-Branching- Rebasing –

+1

''git rebase --onto master foo bar'는 다음과 같은 의미입니다 : "foo"없이 "bar"를 가져와 마스터에 놓으십시오. – schoetbi

6

당신은 마스터에 당신의 바 지점을 리베이스 수 :

git rebase --onto C H M 

, 당신은 수동으로 해결해야한다 (그러나 당신은 또한 체리 따기 때해야 할) 일부 패치가 충돌합니다. 주의의 낱말 : 역사가 이미 간행 될 때 rebase하지 말라.

57

, 우리는보다 큰 예제가 필요합니다. 그래서, 당신은이 상황에서 실제로 척하자 ... 우리가하고 싶은 것을 여기

---A---B---C <= Master 
      \ 
      E---F---F---H <= Foo 
          \ 
          J---K---L---M <= Bar 
             \ 
             N---O---P---Q <= Baz 

그리고 다행히

---A---B---C <= Master 
      |\ 
      | E---F---F---H <= Foo 
      |\ 
      | J---K---L---M <= Bar 
      \ 
      N---O---P---Q <= Baz 

입니다, 힘내는의 옵션에 우리를위한 솔루션을 제공합니다 rebase 명령! 이 수단이 부분으로 나눌 수 있습니다 무엇

git rebase --onto [newParent] [oldParent] [branchToMove] 

: -

  • --onto무언가의 부모를 변경 -

    1. rebase이이 대체 REBASE 구문을 사용하여 자식을 알려주는 플래그입니다
    2. newParent - 리베이스 할 브랜치가 상위가 될 브랜치입니다.
    3. oldParent -이 그것이 부모
    4. branchToMove의 당신이 현재 리베이스하는 지점이있는 지점입니다 - 이것은 당신이 "오래된 부모 지점"에 대한 비트

    수 (리베이스) 이동 지점이다 조금 혼란 스럽지만 실제로하고있는 것은 "리베이스를 할 때 나의 옛 부모로부터의 변화를 무시하라"는 것입니다. oldParent은 이동하려는 지점을 정의하는 방법입니다 (예 : branchToMove) 으로 시작합니다.

    그래서 우리 상황에서 어떤 명령을 실행할 수 있습니까? 우리가 끝 "지점 체인"의 떨어져 각 지점을 당길 필요가 있기 때문에이 명령의 순서가 문제가 있음을

    git rebase --onto Master Bar Baz 
    git rebase --onto Master Foo Bar 
    

    참고.

  • +3

    가능한 한 최선의 방법으로 모든 마법을 사용하십시오. 이 기능을 사용하여 Foo에 대한 작업을 수행 한 기능 분기를 un-fubar (baz)에 사용하고, Bar에 대한 커밋을 수행 한 다음 Foo에 대한 커밋을 수행했지만 모두 커밋 라인에있었습니다. #fail –

    +1

    우수 답변입니다. –

    +0

    @cdeszaq 편집을 시도했지만 무슨 일이 일어 났는지 확신 할 수 없었습니다. 첫 번째 다이어그램에는 첫 번째 다이어그램이 "Foo"여야 할 두 개의 "바"브랜치가 있습니다. – ryanwils

    관련 문제