2010-03-19 2 views
3

내 마스터에서 가장 최근 커밋에 리베이스하려는 브랜치가 있습니다. 문제는 마스터에있는 중간 커밋 중 하나가 특정 파일 집합을 삭제하고 무시하는 것입니다 (this question 참조).git : rebase가 파일 삭제로 커밋 할 때 파일을 지우지 않는 방법

만약 내가 똑바로 rebase, 그 파일은 다시 삭제 얻을 것이다. 어쨌든, 안에 git을 쓰지 않고 모든 파일을 손으로 복사 한 다음 나중에 다시 복사하십시오.

아니면 마스터에서 새 분기를 만든 다음 이전 분기의 커밋을 병합하는 것과 같이해야합니까?

시도 아스키 아트 :

master branch 
    |  w work in progress on branch 
    C  | committed further changes on master 
    |  | 
    B  /committed delete/ignore files on master 
    |  2 committed changes on branch 
    | / 
    A /committed changes on master which I now need to get branch working 
    | 1 committed changes on branch 
    0___/ created branch 

이 (예술을하는, 나는, 다음, 나는 마친 병합 난 그냥에서 분기를 리베이스 수 있음을 인식하지만, 만약 거기에 여전히 알고 싶습니다 '제대로'하는 방법)

업데이트 누구 에게라도 경고. 여기에 제안 된 해결책은 괜찮지 만 마스터를 다시 체크 아웃하면 B 커밋이 다시 적용되고 모든 파일을 다시 잃게됩니다. (

+0

지점에 A 또는 A, C 및 마스터 HEAD 만 필요합니까? – VonC

+0

@VonC, 음, 원래 모든 것을 생각했지만 원래는 A만으로 할 수있었습니다. 궁극적으로 모든 것을 주인공에게 가져다 줄 끝에 (지점 개발이 끝날 때) 결국 rebase하는 것이 좋았을 것입니다. 스트림 '이지만, 최악의 경우에는 결국 병합 할 수 있다고 생각합니다. – Benjol

답변

2

귀하의 의견에 따르면 dev 브랜치를 맨 위에 올려야합니다. B.
제외 마스터 의 당신은 당신이 다른에서 제거 될 하나 개의 지점에서 제거 파일을보고 싶지 않아

한 가지 가능한 해결책은 다음과 같습니다.

  • rebase --interactive 마스터 (있는 경우 커밋 순서를 다시 작성 가능)
  • 'C의 상단에
 
    0--A--C'--B' master 
    \ 
     --1--2--w  dev 
  • REBASE dev에 지점이없는 것을 의미
 
    0--A--C'--B' master 
      \ 
      --1'--2'--w' dev 

이미 다른 (다른 저장소에 마스터를 밀어 (모든 마스터를 나타내는 B를 제외하고 커밋) 자신의 repo/master 지점에서 마스터를 끌어 오려는 사람들을위한 병합 악몽이 포함됨)

+0

결국, 나는 '상처를 입히기'전에 커밋을 리베이스하는 것으로 갔다. 그러나 녹색 진드기는 당신 것입니다. – Benjol