2012-03-19 4 views
6

예 :왜 두 개의 분기가 다르지만 두 분기 모두에서 새로운 커밋이없는 경우 git이 변경 사항을 병합하지 않습니까?

나는 내 마스터 브랜치에 물건이 있습니다. other_branch이라는 또 다른 지점에 stuff + more_stuff가 있습니다. 각 지점에는 커밋 할 것이 없습니다.

체크 아웃 마스터가 other_branch를 병합하려고하면 "이미 최신"이라고 표시됩니다. 아무 일도 일어나지 않아. 이 경우 master에 왜 more_stuff를 병합하지 않습니까? 그건 어떻게 자식이 디자인 된거야?

참고 : other_branch는 이전 커밋 된 커밋에서 생성되었습니다.

답변

6

매우 간단합니다. git이 "이미 최신"이라고 말하면 분기가 분기되지 않았 음을 의미합니다. 적어도 하나의 브랜치에 다른 브랜치에없는 커밋이 포함되어 있으면 두 브랜치가 분기됩니다.

당신이 의미하는 것이 물건에 more_stuff가 있는지 확실하지 않습니다. other_branch (또는 기존 파일을 변경)에 새 파일을 추가하고 "git add"및 "git commit"을 사용하면 other_branch 기록이 master 분기에서 분기됩니다. git은 병합 할 변경 사항이 없으므로 해당 분기에서 변경 사항이 없는지, 즉 커밋하지 않았 음을 나타냅니다.

+2

아, 알겠습니다. 초보자에게는 그다지 명백하지 않습니다. other_branch에는 master와 동일한 커밋이 포함되어 있습니다. 왜냐하면 master의 이전 커밋에서 시작했기 때문입니다. checkout other_branch 때 다른 파일을 볼 수 있기 때문에 혼란 스러웠다. 그래서 git merge가 파일을 마스터로 병합 할 것이라고 생각했다. 나는 그것이 지금 어떻게 작동 하는지를 이해한다. 자식 병합은 현재 작업 트리가 아니라 커밋을 기반으로합니다. – trusktr

2

병합하려는 분기가 이미 현재 분기에 포함되어있는 경우에만 발생합니다.

그래서 언급하신 more_stuff은 이미 마스터 브랜치에 있습니다.

gitk을 사용하면 지점의 시각적 트리를 확인할 수 있습니다.

+0

gitk? 그게 뭔지 모르겠다 –

+0

그것은 기본 자식 GUI입니다. [자세한 정보는 여기.] (https://git-scm.com/docs/gitk) –