2017-10-01 4 views
0

우리는 svn 저장소를 git로 변환하려고합니다. 더 좋은 방법은 A7에서 시작하고 병합을 제거 할 수 있습니다병합 커밋을 대체하기 위해 시작점을 업데이트하는 방법

A1-A2-A3--A6-A7-----A11-A12-An 
    \  \   /
    `------B1-B2---B25´ 

B1이 병합 확약 A3는 지점 B.에 A7 할 수있는 변화를 가져올 : 지금은 변환 된 지점에 정리 작업을하고 싶습니다 B1을 저지하십시오.

A1--A6-A7-A8-A9----A12-An 
     \  /
      `B2--B25´ 

브랜치 B에서 A에 rebase를 시도했지만 그 결과는 이미 동일합니다. 상류의 missundertsanding으로

업데이트 A. 에는 추적 원격 지사가 (SVN의 브랜치와 태그가 제거되지 않은)된다.

나는 제목 난 당신이 옳은 길을 가고 있다고 생각도

답변

0

업데이트되었습니다.

git checkout A 
git pull 
git checkout B 
git pull 
git rebase A 
<fix conflicts> 
git push -f 
+0

감사합니다. 내가'상류 '의 woridng을 이해하지 못한 것 같다. 나의 첫 번째 이해에서 그것은 부모 지부를위한 또 다른 단어일지도 모른다. 이 부분을 질문 부분에서 명확히하겠습니다. – MarS

0

tecnical 점 : 다음 분기의 끝으로 B 지점의 변경 사항을 리베이스하려면 다음을 시도 당신이 역사를 편집하다 경우, 새로운 커밋이 생성됩니다 (그들은 새로운 해시를 가지고 있고, 것입니다 귀하의 현재의 역사는 이미 다른 개발자들과 공유되어 있으므로 강제로 repo를 업데이트하도록 알려야합니다.)

# this : 
A1-A2-A3--A6-A7-----A11-A12-An 
    \  \   /
    `------B1-B2---B25´ 

# into this : 
A1--A6-A7-A8-A9---A11-A'12-A'n 
     \   /
      `B'2--B'25´ 

새로운 커밋 될 B 분기에 커밋

뿐만 아니라 merge in B에서 커밋 시작하는 A 분기에 커밋 :

나는 변환하는 방법을 설명합니다.

우선 들어

, 나는 임시 나뭇 가지에 일을 제안 :

# create branch 'wipB' on commit B25 and switch to this new branch : 
git checkout -b wipB B25 
  1. 당신이 A7 위에 B2, ..., B25을 재생하려는 경우, 당신은
    git rebase --onto <new_base> <upstream> <branch>
    변형을 사용할 수 있습니다 git rebase (doc here) :

    # note the `B1` : the commit mentionned as <upstream> is ommitted 
    git rebase --onto A7 B1 wipB 
    
  2. 363,210 병합이 A12를 저지 다시하기 :

    # start a new "A" branch from A11 : 
    git checkout -b wipA A11 
    
    # merge the new "B" branch : 
    git merge wipB 
    
    # once merge is resolved, you can compare with the original A12 to see 
    # if this new merge commit has all the content you expect : 
    git difftool -d wipA A12 
    
  3. A'12의 상단에 A13, .., An을 재생할 : 당신의 답변에 대한

    git rebase --onto wipA A12 An 
    
관련 문제