2011-08-06 7 views
2

내 브랜치 중 하나를 다른 브랜치에 rebase하려고 할 때, git은 병합 및 충돌을 일으킬 수 없습니다. 충돌 파일에서 다음을 볼 수 있습니다 :왜 자식을 병합 할 수 없습니까?

<<<<<<< HEAD 
======= 
    if (($mode == 'w')) { 
    $mode = 'r'; 
    var_export($GLOBALS, true); 
    //print("<pre>"); 
    //var_dump(array_keys($GLOBALS)); 
    //print("</pre>"); 
    } 
>>>>>>> 7896670... Some initial changes that I carried over from other directory... 

나는 왜 자식이 두 커밋을 병합 할 수 없는지 궁금합니다. 그것은 사소한 병합입니다, 안 그래요? 한 버전은 을 포함하지 않으며이고 다른 버전은 무언가가이므로 병합이 간단합니다. 내가 뭘 놓치고 있니?

+0

여기에 rebase (병합)하여 병합 하시겠습니까? 이런 일이 일어나기 위해 발급 한 명령을 게시 할 수 있습니까? 당신이 아무 것도 포함하지 않는다고 말할 때 당신은 구체적 일 수 있습니까? –

+0

@Chris Nicola : 내가 준 명령은'git rebase -i origin/master' (나는 많은 커밋을했다 ... 나는 첫 번째 것을 골라 내고 나머지를 뭉개 버렸다)였다. 나는이 과정에서 혼란스러워서 실제로 왜 병합이 나에게 이러한 갈등을주고 있는지 이해하지 않고 수동으로 모든 병합 작업을 수행했습니다. 3 방향 병합 알고리즘을 이해해야합니다. –

답변

4

이들의 공통 조상 (병합 기준)을 확인하십시오. 기타 내용을 포함해야합니다.

git diff `git merge-base HEAD 7896670` HEAD 
+1

정확합니다. 충돌은 코드의 해당 비트를 삭제하거나 7896670 버전으로 변경하는 것이 올바른 동작인지 여부를 알지 못하는 경우입니다. –

+0

까다로운 방법은 병합의 숨겨진 세 번째 부분을 보여주는 방법입니다. 문제가 있다고 가정합니다. [삭제를 나타낼 것이라고 생각했습니다] –

+0

@Philip, 위의'git diff' 명령과 정확히 같습니다. . –

관련 문제