2012-08-16 3 views
5

내 Git 저장소에는 내용이 동일한 alphabeta의 두 파일이 있습니다.삭제 된 파일에 대해 병합이 혼동 된 후 Git rebase가 발생했습니다.

마스터 브랜치에서 alpha을 삭제하고 내 지형지 물 브랜치에서 편집하면 마스터를 기능으로 병합 할 때 충돌에 대해 경고합니다. alpha을 삭제하여이 문제를 해결한다고 가정 해 보겠습니다. 그때 git rebase master를 사용하여 마스터 위에 내 기능 지점을 리베이스 경우

alpha이 삭제됩니다,하지만 기능 분기에 alpha에 대한 변경 사항은 지금 beta에 적용됩니다! 충돌 경고가 표시되지만 자동 검토를 통해 차단 된 커밋없이 자동으로 병합되어 해결되었습니다.

흥미롭게도 git rebase -i을 기본값으로 사용하면 beta은 편집되지 않으며 병합시 해결 된 동일한 충돌을 해결할 수 있습니다.

세 관련 질문에 다음 : 다른 어떤 커밋에 의해 편집되지 않은 경우

  1. 왜 망할 놈, 나는 하나 개의 파일에 적용되는 변경 사항이 다른 적용해야한다고 생각합니까?
  2. 어떻게 이런 상황을 피할 수 있습니까?
  3. 기본 옵션을 사용하는 경우에도 대화 형 리베이스의 동작이 다른 이유는 무엇입니까?

Win7에서 Cygwin에서 Git 1.7.9를 실행 중입니다. 나는 누가 transcript on pastebin을 넣었는지를 보여 주며 git init을 빈 디렉토리에 둔다. 자세한 내용을 보려는 사람이 있다면 (길이 때문에 여기 게시하지 않는다). documentation for git-rebase에서

답변

10

: 리베이스하는 전략을 병합

-m
--merge
사용. 재귀 (기본값) 병합 전략을 사용하면 리베이스가 업스트림 측에서 이름 변경을 인식 할 수 있습니다.

파일이 삭제되면 Git은 이름 바꾸기 후보로 간주하고 해당 이름이 바뀐 파일에 리베이스 된 패치를 적용하려고 시도합니다. 그것은 당신의 경우에 가난한 추측을했을 수도 있습니다.

-m 옵션을 사용하여 다른 병합 전략을 선택할 수 있습니다. 예를 들어 resolve 병합 전략은 이름 바꾸기 자동 검색에서이 문제를 피할 수 있습니다 (병합 전략에 대한 자세한 내용은 git-merge 참조).

+1

또 다른 가능한 해결책은'재귀'전략의'rename-threshold' 옵션으로 재생하는 것입니다. 'M100 %'로 설정하면 나쁜 추측으로 문제를 해결할 수 있습니다. –

+0

Thanks @GabrielePetronella. 그것이 나를 위해 그것을 해결했습니다. – thehouse

관련 문제