2013-04-05 2 views
1

브랜치 A에는 두 가지 '이야기'가 있습니다. 하나는 내가 마스터하기를 원했지만 하나는 그렇지 않았습니다.Git merge - 추적하지 않은 파일을 커밋하지 않고 커밋하지 말 것

이러한 변경 사항이 기능 지점에 없기 때문에 필자는 두 가지를 어떻게 든 분리해야했습니다. 내가 사용

git merge --no-commit --no-ff A 

마스터에있는 동안. 이로 인해 예상대로 조정할 수있는 준비 영역이 생겼습니다. 원하지 않는 커밋과 관련된 파일은

git reset file 

입니다. 이 방법이 올바르지 않습니까? 결과는 예상치 못한 결과였습니다. 파일은 추가되지 않았지만 (원하는 경우) 기록이 남았습니다. 힘내는 그들을 제거 된 파일로 추적했다! 이제 마스터에서 A로 다시 병합 할 때 커밋되지 않은 작업을 삭제하려고 시도합니다. 그것의 아주 이상한 주인은이 파일의 어떤 것을 결코 가지고 있지 않았다. 이것은 매우 불편합니다. 누구나 이러한 변경 사항을 '동기화'할 수있는 방법을 제안 할 수 있습니까? 또는 앞으로 나아갈 더 나은 접근법, 왜 그렇게하지 않을 것입니까?

답변

1

가장 깨끗한 방법은 A와 master의 병합베이스에서 story1story2 두 개의 분기를 만드는 것이라고 생각합니다. 그런 다음 체리 피킹 및 편집/침입 커밋을 통해 A 커밋을 분리합니다. 따라서 각 이야기에 대해 두 개의 새로운 가지가 별도로 있습니다. 그러면 쉽게 병합 할 수 있습니다.

+0

좋은 방법이지만 체리 피킹의 오버 헤드를 피하기를 바랬습니다. 그래서 파일로 처리하는 것을 사용했습니다. 이것은 버그입니까, 아니면 이런 식으로 작동하지 않아야합니까? 분기에 추가되지 않은 파일에 대한 로그 항목을 커밋했습니다. 왜 그랬을까요? – marked

+1

@marked 두 개의 기록을 병합합니다. 그리고 그것은 모든 커밋이 병합 된 역사에 나타나는 것을 의미합니다. 따라서 병합 된 분기에 추가 된 파일에 대한 기록 항목이 있고 병합 중에 삭제 된 것입니다. 앞으로 아주 힘들게 들릴 것 같네요, 당신이 한 일을 정확하게 묘사하지 않습니까? 체리 피킹은 당신이 역사에서 무엇을 골라야 할지를 선택적으로 선택한다는 것을 의미합니다. – kan

+0

선택 병합과 분기 분할의 실질적인 차이점은 스토리 1 변경 만 병합을 수행하면 스토리 2 변경 사항을 나중에 병합 할 수 없으므로 * remerge * 할 수 없기 때문입니다. 그러나 분할 된 브랜치는 어떤 순서로든 병합 될 수 있습니다. – kan

관련 문제