2013-06-11 3 views
4

기본 분기 (모든 파일 및 다른 파일의 일부가 아닌)에서 커밋의 일부를 명명 된 분기로 병합하려고합니다. 나는 graft을 시도했지만, 선택의 기회를 포기하지 않고 전체 커밋을 수행합니다. 어떻게이 일을 끝낼 수 있습니까?일부 파일 만 병합하는 방법은 무엇입니까?

예 :

A---B---C---D 
     \ 
     -E---(G) 

G

은 아직 존재하지 않습니다. CD에 5 개의 파일이 추가되고 5 개의 파일이 수정되었습니다. GC에 추가 된 5 개의 파일 중 2 개를 추가하고 파일 중 하나의 수정 사항과 다른 수정 사항을 하나씩 갖고 싶습니다. 나는 또한 D과 비슷한 것을 가지고있는 것이 이상적입니다.

graft to local...을 선택하면 전체적으로 C 변경 세트가 있습니다. 같음 merge with local...

+2

내가 알고있는 한 Mercurial 자체는 이러한 종류의 선택적인 병합을 지원하지 않습니다. * 할 수있는 일은 일반적인 병합을 수행 한 다음 병합하지 않으려는 파일을 되돌리고 부분적으로 병합 할 파일을 수동으로 변경하는 것입니다. 마지막으로 병합을 커밋합니다. – voithos

+0

@voithos 한 지점에서 다른 지점으로 버그를 수정하는 표준 방법입니까? 나는 이것이 공통적이고 지원되는 시나리오 일 것이라고 생각할 것이다. – baruch

+2

표준이 아니므로 권장하지 않습니다. 물론, 모범 사례는 버그 수정이 ** 자체 변경 집합 **이어야한다고 말합니다. 따라서 개별 파일을 선택하고 선택해서는 안됩니다. 만약 그렇다면, 당신은 graft를 사용할 수 있습니다. (또는 디폴트 브랜치에서 버그 수정을 모두 마친 경우 병합 할 수도 있습니다.) – voithos

답변

4

병합 단위는 전체 변경 집합이므로 C와 D는 더 작은 조각으로 커밋되어야합니다. 이제 모든 것을 병합하고 일부 파일을 되돌릴 수는 있지만 나중에 병합 할 수 없게됩니다. 이미 병합 된 것으로 간주됩니다.

내가 할 수있는 것은 C와 D의 변경 복사본을 포함하지만 일관된 부분으로 분할하는 예제에서 B에 뿌리를 둔 C-D와 분기를 만드는 것입니다. 그런 다음 전체 변경 집합을 병합하고 원본 C-D 분기를 닫거나 삭제할 수 있습니다. I는 I 나서서 그것을이고 네 새로운 체인지 (예 rebase로 히스토리 고쳐 쓰기 도구를 사용하여) 재 배열 동안 위에서

 C---D 
    /
A---B--C1--D1--C2--D2 (equivalent to C--D) 
    \ 
     E---(G?) 

은, C1과 C2는 함께 있도록 할 수있는, C. 동등 단순히 E와 D1을 병합 :

 C---D 
    /
A---B--C1--D1--C2--D2 
    \  \ 
     E------G 

을 새로운 변경 집합을 재정렬하는 옵션이없는 경우, 당신은 어떤 공상 주문 C1, D1, C2, D2에 부분 변경 집합을 커밋 tapdancing해야 할 것; graft (또는 transplant)을 사용하면 별도로 병합 할 수없는 변경 사항을 복사하는 것이 훨씬 간단합니다. 예를 들어 다음에서 C1을 병합 할 수 있지만 C2를 함께 가져 오지 않고 병합 할 방법이 없으므로 D1 (D1 '이라고 표시)의 사본이 필요합니다.