2012-07-04 2 views
1

우리는 복잡한 상황에 처해 있습니다. 저장소의 왕이 있습니다 :힘내 유일한 병합 병합, 다른 병합 병합 없음

 C1  C4    C5 
devel *---*---*---*-----------*--------- 
       \_____ 
        \ C2 C3  
fix-ie *--*---------*----*----*-------*--- 
        M1     \___ 
              \ 
testing *----*-------------------------------*--- 
              M2 

위에서 볼 수 있듯이 devel은 fix-ie branch 내에 병합됩니다.

문제 "테스트"분기 "(STABLE)"을 커밋하지 말았어야 (우리가 C1을 원하지 않는다)하지만 우리는 C2를 갖고 "테스트"에 수정 - 즉 병합해야하고 C3는

하는 경우를 저지른 것입니다 나는 :

나는 테스트 분기에서 M1 병합을 가질 것이다 ... 그래서 C1 커밋은 테스트 분기에서 발견된다. 그건 우리가 원하는 것이 아닙니다.

어떻게 피 하시겠습니까?

단순화 된 예를 들어, 병합이 많고 ​​수정본 및 devel 분기에 커밋이 많이 있음을 기억하십시오.

감사합니다 :) 그것을 할 수

답변

0

한 가지 방법은 병합이 devel 지점에서 커밋 제외 별도의 fix-ie 분기를 만드는 것입니다. 그런 다음 해당 분기를 testing 분기에 병합 할 수 있습니다.

git reflog show -all을 사용하여 reflog를 검색하면 무시하려는 분기에서 병합 커밋을 찾을 수 있습니다.

+0

그러나 문제는 fix-ie와 testing이 "devel"의 브랜치라는 것입니다. devel은 메인 브랜치이고, testing은 테스트 환경에 대한 몇 가지 수정 사항이있는 devel의 브랜치입니다. devel은 다음 릴리스를 위해 만들어졌습니다. 수정 (즉, devel)에서 많은 병합이 있습니다. – Metal3d

0

해결책을 찾은 것 같습니다.

"123abc"라는 이름의 첫 번째 병합 SHA 가져 오기. 할 수있는 일 :

git rev-list --no-merges --reverse --topo-order debug-ie ^123abc 

각 줄은 커밋이지만 목록에는 병합이 없습니다. 내가 틀렸다 경우

for SHA in $(git rev-list --no-merges --reverse --topo-order debug-ie ^123abc); do 
    git cherry-pick $SHA 
done 

말해 ...하지만 좋은 생각이 될 것 같다 :

그래서 내가 할 수있는 방법입니다.

+0

실제로 모든 커밋을 복제하고 있습니다. 항상 최선의 아이디어는 아닙니다. –