2017-01-26 7 views
1

다음 그림을 참조하십시오이미 분기에서 제거 된 master 파일을 안전하게 제거하는 방법은 무엇입니까?

my-branch  A---B---C---D 
      / \ 
master  E---F---G 

병합 동안 B에서 내가 실수로 내가 git rm를 사용 D에서 my-branch에서 삭제 master에 파일을 추가 한 G에. 불행히도, 나는 C에서 일하고 있는데 아직 마스터와 병합 할 준비가되어 있지 않습니다. 안전하게 git rm의 파일을 master에 넣고 my-branch (파일이 이미 삭제 된 위치)을 나중에 master으로 병합 할 수 있습니까?

즉, BG으로 병합하여, 내가 원하지 않는 커밋 G에 master에 파일을 추가했습니다. 이 파일은 git rm입니다. my-branch에서 D까지입니다. C에 아직 준비되지 않은 변경 사항이 포함되어 있기 때문에 D을 마스터에 병합하고 싶지 않습니다. 계속 진행하는 가장 좋은 방법은 무엇입니까?

답변

2

D 커밋에 rm'ed 파일 만 있으면 C 커밋보다 먼저 이동 한 다음 마스터에 병합합니다. 그런 다음 마스터로 D를 병합하고

A---B---D---C / \ E---F---G---H

으로 끝낼 수 있습니다 C. 전에 git rebase -i HEAD~2 후 D를 넣어 커밋 순서를 바꿀 것이 경우

D는 다른 변경 사항이있는 경우, 당신은해야 커밋을 다시 실행하여 rm'ed 파일 만 가져온 다음 순서를 바꾸십시오.

이미 게시 한 사람이 my-branch이면 누구나 변경 한 내용은 CD의 기존 변경 사항이 포함 된 병합으로 끝납니다. 그 경우 my-branch을 병합하기 전에 파일을 삭제 한 다음 master으로 병합 할 때 사소한 병합 충돌을 처리하기 위해 D을 master로 체리 선택합니다. IMO 당신이 이제는 다른 모든 사람들보다 먼저 충돌을 다루는 것이 더 낫습니다.

+0

그래서'my-branch '를 커밋'D'를 통해 게시했다면 어떻게 될까요? 이것이 역사를 다시 쓰면서 길을 잃을까요? 수정 : 아마도 D는 rm'ed 파일 만 포함하므로 아마도 괜찮을 것입니다 ... – scherm

+0

그 경우에 대한 내 대답을 편집했습니다. 다른 사람이 그 지점을 가지고 있다면, 당신은 이상한 병합을 만들게 될 것입니다. –

0

대화 형 리베이스를 사용하는 것이 익숙하지 않거나 불편한 경우 커밋 G에서 분기를 만들고 체리 D를 선택하여 분기를 마스터로 만들거나 병합 할 수 있습니다.