git pull이란?
git pull은 Remote Repository의 커밋을 가져온 다음(git fetch) 현재의 Working Directory에 Merge하는 동작을 하는 명령어이다.
git pull = git fetch + get merge
예를 들어 다음과 같은 상태가 있다고 해보자. GitHub의 master 브랜치에는 fourth commit까지 있다. 하지만 Local master 브랜치는 second commit까지 밖에 없다. Remote Branch 를 트래킹하는 origin/master 브랜치도 fetch가 안되어 second commit을 바ㅏㄹ보고 있다.
이 상태에서 git fetch를 하면 remote 브랜치를 트래킹하는 origin/master가 다음과 같이 변경된다. [그림2]처럼 origin/master가 Remote master branch의 최신 커밋을 트래킹해서 fourth commit까지 가져온다.
그 후 origin/master를 Local의 master로 머지시키면 [그림3]과 같이 Local master branch도 fourth commit이 HEAD commit이 된다.
이 동작이 바로 git pull의 동작이다. git pull은 git fetch와 git merge 동작을 한 번에 하는 명령어이다. 이로 인해 git pull에서는 충돌이 일어날 수 있다.
git pull로 인한 conflict
git pull은 merge 동작을 포함하기 때문에 conflict이 일어날 수 있다. 예를 들어 [그림4]와 같이 Local master branch에 new commit이 있는 상태에서 remote branch에 새로운 커밋이 있다면 이 둘이 같은 파일을 수정했을 경우 conflict가 일어난다.
이 conflict는 Local conflict를 해결하는 방법으로 해결하면 된다. 만약 conflict을 해결하는 방법이 궁금하면 이글을 보도록 하자.