2012-11-29 3 views
3

내 수수께끼입니다. 팀 구성원이 공급 업체 구성 요소를 수정했습니다. 그런 다음이 구성 요소가 현재 버전으로 업그레이드되어 팀 변경 사항을 덮어 씁니다.'병합'하지만 같은 지점에 커밋 된 원격/로컬 /베이스 지정

해당 부분에는 팀 동료의 중요한 변경 사항이 있었지만 업그레이드로 인한 최소한의 변경 사항은 추가되었습니다.

---component version 1.0----team change A---team change B---component version 2.0 
     (stock)            (result of upgrade) 

내가 원하는 것은과 같이 병합을하는 것입니다 : 내가 가지고있는 것은 이것이다

  ----team change A---team change B 
     /        \ 
---component version 1.0     successful 'merge' 
     (stock)       /
     \------------component version 2.0 
         (result of upgrade) 

근거 우리가 component version 1.0에서 공급 업체 변경 사항을 볼 수있는 경우 팀 변경 사항을 적용하는 것은 쉽다는 것을 component version 2.0으로 변경하면 component version 1.0에서 team change B으로 변경되며 두 변경 사항 집합이 병합됩니다. 내가 알고있는 것처럼

,이 작업을 수행 할 수있는 유일한 방법은, team change B에 지점을 다시 component version 1.0에서 새로운 지점을 체크 아웃과 패치로 component version 1.0component version 2.0 사이 DIFF을 적용, 가지가 만든 병합하고 커밋하는 것 해결.

기본적으로 git merge --BASE='component version 1.0' --LOCAL='team change B' --REMOTE='component version 2.0' 같은 병합을 시뮬레이트하여 병합 해결 도구를 사용하여 결과 파일의 모양을 결정할 수 있습니다.

답변

1

지점을 재설정하고 싶습니다 (아마도 이것은 공유 저장소에 게시되었으며 사람들이 강제 업데이트를 처리해야하는 것을 원치 않습니다) s)를 사용하면 간단히 버전 2.0으로 업그레이드하고 버전 1.0 가져 오기에서 벗어난 지점에서 버전 2.0으로 업그레이드 한 다음 해당 분기를 병합 할 수 있습니다. 예를 들어

(지사 가정은 master라고하며 master 현재 체크 아웃) :

# create a commit that is the opposite of HEAD, effectively undoing it 
git revert HEAD^ 
# create a new branch based on the original vendor import 
git checkout -b vendor <sha1-of-vendor-1.0-commit> 
# import the vendor 2.0 code 
git read-tree -u --reset master^ 
git commit -m "vendor 2.0 code" 
# merge in the new vendor code 
git checkout master 
git merge vendor 
+0

재설정 마스터는 옵션이 아닙니다. 실제로 araxis merge의 3-way diff/merge 기능을 사용하여 종료되었습니다. 각 창에서 동일한 파일을 선택한 다음 각 창에서 다른 버전을 선택했습니다. 왼쪽 팀 변경 B, 중간 공통 조상, 오른쪽 구성 요소 버전 2.0. 내가 프라 크 시스에 접근 할 수 없다면, 이것이 최고의 대답이었을 것입니다. – kayaker243

0

당신은 이런 식으로 할 수 있어야이 (master를 가정하는 것은 아마 아니다 지사의 이름입니다) :

git checkout master 
git reset --hard <SHA of team change B> 
git checkout -b vendor-upgrade <SHA of component version 1.0> 
# replace contents of working directory with component version 2.0 
git add <everything that needs to be added> 
git commit -m "component version 2.0" 
git checkout master 
git merge vendor-upgrade 

팀 변화의 특성에 따라, 당신은 할 수 있습니다 일부 병합 충돌을 다루고, 당신이 그것을 완료하거나 그 피할 수없는 버전 3.0이 나오면 거기에 그대로두고 vendor-upgrade 지사를 삭제할지 여부는 여러분에게 달려 있습니다 ...