커맨드 라인이 아닌 깃의 개념 위주 정리입니다
** Fast-Forward merging **
git checkout master
git merge test
git checkout master
) 머지를 해야 한다. (git merge test
)fast-forward merge
가 가능하다.fast-forward merge
는 선형적으로 머지하는 것인데, 구글링으로 이해한 바에 따르면
non fast merge
는 test 브랜치의 곁가지인 모습을 유지하면서 마스터 브랜치와 합쳐지는 형태이다. 그렇기 때문에 두 브랜치가 머지된 지점을 명확하게 알 수 있다. 합쳐질 때에 추가적인 커밋이 일어난다.(비선형적)만약 마스터 브랜치에서도 커밋이 일어난다면?
여태까지는 마스터 브랜치에서는 아무런 변화 없이, test 브랜치에서만 수정이 있었는데 만약 마스터 브랜치에서 별도 수정 및 커밋이 있다면?
Auto-merging new.txt
CONFLICT (content) : Merge conflict in new.txt
Automatic merge failed; fix conflicts and then commit the result.
컨플릭트가 일어난 다음 파일을 열어보면
test 1
<<<<<<< HEAD
test 3(master branch)
=======
test 2(test branch)
>>>>>>> test
test1은 공통 조상이며, <<<< HEAD
밑에 쓰여진 라인이 현재 HEAD 즉 마스터 브랜치에서 커밋된 내용, =====
밑의 라인이 test 브랜치에서 커밋된 내용이다. 이 두 줄이 충돌하고 있는 것이다. 마스터 브랜치에서 커밋한 내용과 test 브랜치에서 커밋한 내용 중 어떤 것으로 최종적으로 할 지 결정해주어야 된다.
<<< 이니 === 같은 것은 깃이 그냥 표시를 위해 넣어준 것이기 때문에 이런 라인들은 지운 다음, 충돌이 없도록 어느 한 쪽으로 내용을 바꿔준다. 그 다음 git add, commit을 해주면 컨플릭트가 해결되며 머지가 끝난다.
만약 컨플릭트 해결 중에 그냥 머지 자체를 그만두고 싶다면 git merge --abort
명령을 하면 된다.