2016-07-15 2 views
5

나는 아마도 옳은 것을 얻지 못할 것이지만 누구나 내게 설명 할 수 있겠는가? git merge (같은 지점)은 왜 안되는가? git rebase은 왜 충돌 하는가?Git : 병합이 수행되지 않는 이유는 rebase가 충돌하는 이유는 무엇입니까?

내가 알고있는 한, git merge은 동일한 커밋을 적용하고 패치로 내 브랜치에 적용하는 반면, git rebase은 현재 브랜치에서 커밋하기 전에 다른 브랜치에서 커밋을 넣습니다. diff은 동일하지 않을 수도 있지만, 아마도 반대가 될 수 있습니까? 내 커밋으로 다른 브랜치를 패치하는 것은 왜 다른 커밋으로 내 브랜치를 패치하는 것이 문제가 아닌지 잘 모르겠습니다.

답변

3

리베이스하는 동안 일부 분기의 모든 커밋을 다른 커밋 위에 적용합니다. 이러한 커밋들 중 하나가 당신이 후속 커밋에서 해결할 충돌이있을 수 있습니다. 따라서 병합 작업에는 충돌이 없지만 rebase는 중간 충돌로 이어집니다.

또한 이미 해결 된 충돌을 자동으로 해결할 수있는 git rerere도 참조하십시오.

+0

나는 당신이 말하는 것을 이해하지만, 전적으로 그것을 얻지는 못합니다. 내 지점 A가 a, b 및 c를 저지른다고 가정 해보십시오. 그런 다음 커밋 d와 e를 사용하여 지점 B를 만듭니다. Commit f가 브랜치 A에서 생성됩니다. ** Rebase ** (브랜치 B에서)는 a, b, c, f, d, e가됩니다. ** 병합 ** 결과는 a, b, c, d, e, f입니다. 이제 지구상에서 어떻게 C가 커밋 c와 병합 충돌을 일으킬 수 있습니까? – minitauros

+0

@minitauros (1) 병합으로 인해 두 개의 분기가 연결됩니다. 하나는 a, b, c, f가 있고 하나는 선형 기록이 아니라 a, b, c, d, e입니다. (2) 지점 A에서 만들어진 커밋 F가 충돌을 일으키지 않는다면 리베이스 할 때 충돌을 일으킬 수있는 방법을 볼 수 없습니다 (자세한 예를 들어 보면 좋을 것입니다). (3) 그러나 D가 F와 충돌하면 E가 충돌을 일으키고 rebase는 충돌을 재현하지만 병합은 일어나지 않습니다. – coredump

+1

그럼, 거기에 대한 설명 주셔서 감사합니다! 좀 더 명확하게 정리합니다. 불행히도 나는 더 이상 예제를 제시하지 못했지만 (다시 말하면), 같은 질문이 생기면 다시 한 번 그 질문에 답한다면 나는이 게시물을 더 많은 정보로 업데이트 할 것이다. :) 지금은이 대답이 충분히 좋은 것 같아요, 고마워요! – minitauros

관련 문제