2013-09-16 2 views
5

일부 단일 커밋 - 병합뿐만 아니라 git 히스토리에서 특정 커밋 인 C를 삭제하려고합니다.병합이 포함 된 git 내역의 특정 커밋 제거

기록은 다음과 같습니다. 이 예에서는 단일 커밋 - 병합 m6과 문제가있는 커밋 C을 제거하려고합니다. 내가 Cb6/m6,이 작품을 절제하는 "자식이 -i 리베이스"를 사용하는 경우

             vv 
---m0------------------m1---m2---m3---------m4---m5---b6---m7---(...) 
    \    /   \vvvvvvv/   ^^ 
    b0---b1---b2---b3    b4---b5 
            ^^^^^^^ 

,하지만 난 얻을 :

---m0-------------------m1---m2---m3-------------m4---m5----m6---m7---(...) 
    \    /   \   /  \/
     b0---b1---b2---b3    b4--(C)--b5   b6 

나는 (변경 강조)이 함께 바람하려는

---m0---b0---b1---b2---b3---m1---(...)--- 

및 기록이 병합됩니다. 나는 전체 구조를 보존하고 싶다.

error: Commit <sha-1 corresponding to m6> is a merge but no -m option was given. 
fatal: cherry-pick failed 
Could not pick <sha-1 corresponding to m6> 

을하고 (나는 C를 제거 할 수 있지만) b6/m6 나는 제거 할 수 없습니다 : 반대로, 나는 --preserve-merges 플래그와 함께 실행하는 경우, 그때 얻을.

원하는 결과를 얻을 수있는 올바른 방법은 무엇입니까? 그게 중요하다면 git 1.8.4를 사용하고있다.

은 (에 StackOverflow에 다른 질문은 내가 그렇게 거의 내가 말할 수있는이 중복 질문이 아닌, 바로이 특정한 경우를 고려하지 않는 것 정독하는 것이 있습니다.)

+0

아래 답변은 본질적으로 대답이 아니지만 의견이 너무 크거나 필요합니다. 이것에 대한 재생산자를 생각해내는 것이 고통 스러울 것이라는 것을 안다. 그러나 만일 당신이 버그가 있다면, 그게 분명히 힘든 사람들을 고치는 데 도움이 될 것이다. :-) – torek

답변

0

는 것 같은데 git-rebase--interactive의 작은 버그가있을 수 있습니다 :

  case "$new_parents" in 
      ' '*' '*) 
        test "a$1" = a-n && die "Refusing to squash a merge: $sha1" 
      ... snip ... 
      *) 
        output eval git cherry-pick "$strategy_args" "[email protected]" || 
          die_with_patch $sha1 "Could not pick $sha1" 
        ;; 

이이 cherry-pick을 사용하려고 할 수 있도록 부모의 새로운 세트, 단수 m6을 명중하지만, m6이 병합 그래서 cherry-pick 것은 사용하는 부모에 대한 힌트를 필요 .

나는 왜 m6을 가져 가려고하는지 잘 모르겠다.

0

해결책/해결 방법 : (나를 위해, 어쨌든) 이것은 git rebase의 버그 인 것 같습니다. 나는 자식 1.7.9로 되돌아 갔고 나의 문제는 해결되었다; git rebase --interactive --preserve-merges은 내가 원했던 것과 똑같이 일했으며 내 게시물에 표시된 그래프를 생성합니다.

관련 문제