2009-11-14 2 views
1

브랜치를 git에서 병합하는 방법을 알고 있습니다. 동료는 모두 하위 프로젝트에 큰 변화가 만들어졌다 지점을 가지고git : 개별 커밋에 상관없이 한 브랜치의 소스 트리의 일부를 다른 브랜치에 병합하십시오.

project/ 
|--subproj1/ 
| |---(files) 
| 
|--subproj2/ 
    |---(files) 

:

나는 다음과 같다 지점이있다. 더 구체적으로 말하자면, 그는 새로운 서브 프로젝트에서 공통된 코드를 사용하도록 둘 다 변경했습니다. 그러나 여러 가지 이유로 우리는 장래에 언제든지 지회를 추진하지 않습니다.

내 브랜치는 subproj1에서만 마스터와 분기됩니다. 여기서 하위 프로젝트 별 기능 향상을하고 있습니다. 내 하위 프로젝트는 다른 일부 프로젝트보다 중요하지 않으므로 어떤 유형의 변경 사항을 적용 할 수 있는지에 대한 제약이 적습니다. 내 동료의 subproj1 변경 사항 (그리고 이러한 변경 사항이 적용되는 새 subproj3)을 병합하고 싶지만 내 기존 subproj2 만 남겨 둡니다. 언젠가 미래에 그가 프로젝트를 완전히 마스터하여 마스터로 만들 때, 그의 subproj2가 일반적으로 병합되도록 변경하고 싶습니다.

어떻게해야합니까?

답변

2

각 커밋은 논리적 인 작업 단위입니다. 불행하게도, 그것은 당신이 동료가 subproj1과 subproj2를 편집 할 때 편집 한 것을 같은 브랜치에서 만들었다면 분리 할 수 ​​없다는 것을 의미합니다.

그러나 사용자가 묻는 것을 수행하려면 git filter-branch을 사용하십시오. 이를 사용하여 동료의 모든 커밋을 재생하지만 각 커밋에 대한 subproj1의 변경 사항 만 추가하여 정의되는 새 분기를 만들 수 있습니다.

명령은의 라인을 따라 뭔가 있습니다

git fetch colleague-repo ... 
git filter-branch --subdirectory-filter subproj1 -- A..B 

이렇게함으로써 고유 한 지점을 만들

(A..B는 자신의 저장소에서 가져 커밋의 범위 임) 동료 작업과 완전히 별개의 작업. 이 새 분기와 동료 분기를 마스터에 병합하면 subproj1에 대한 변경 내역이 두 분기간에 영구적으로 분할됩니다.

+0

달콤한,이 시도해 보겠습니다. 감사! –

관련 문제