본문 바로가기

개발툴...

[Git GUI 툴] 3. SourceTree 를 이용한 Pull & Merge

3. SourceTree 를 이용한 Pull & Merge


Git에는 Fetch와 Pull이 있습니다. 이 둘은 조금다른데 공식[?] 설명은 Fetch는 원격서버의 정보를 가져오지만 merge를 하지 않고, Pull은 정보를 가져와서 merge를 한다 라고 되어 있습니다.


쉽게 말해 Fetch는 원격서버의 정보를 새로고침 하는 것이고 Pull은 원격서버 정보를 로컬에 반영하는 것 입니다.


스샷을 봅시다.

지난화 마지막에서 파일 하나를 수정한 후 커밋한 모습입니다. 원격서버는 다른 브랜치를 가리키고 있습니다.

우선 변경점을 원격에 푸시하기전에 먼저 페치를 해 봅시다.(중간의 Fetch 아이콘을 누릅시다. 점화살표)


무언가 변화가 생겼습니다. Pull에 1 아이콘이 생기고 Push에도 1 아이콘이 생겼네요(빨간박스)

깃 로그도 무언가 달라졌습니다. 트리그래프도 분기가 되었습니다.


이는 다른 누군가가 서버에 푸시를 해놓았단 이야기 입니다. 원격 서버에 변경이 일어났다는 것이죠.

이런 상황에서는 Pull을 해서 로컬의 파일을 원격 파일들과 싱크를 맞춰주기 전에는 푸시가 불가능 합니다.

자 Pull을 눌러 이제 변경된 사항을 로컬에 반영하도록 합시다.


무언가 심각한 것 같은 상황이 보입니다(빨간박스)

이는 Conflict가 생겼다는 표시인데요. 동일 파일의 동일 라인을 나도 수정하고, 다른 사람도 수정했다는 소리입니다.

같은 곳을 건들였으니 충돌이 일어난 것이죠.  직접 파일에 가 확인해봅시다



꺽쇄와 = 표시로 충돌난 부분이 잘 나와 있습니다.

======= 윗부분의 HEAD 까지가 현 로컬에 작성되어 있는 부분이고

밑부분의 커밋 해시 값 까지가 원격에서 가져온 코드 입니다.


여기서 원하는걸 선택하고 버릴걸 지운후 기존에 Commit 하듯이 합시다.


화살표로 눌러 Staged Changes 로 올리면 변경되었단 표시가 나오고...


커밋을 하면 위와같이 소스트리에서 자동으로 생성한 커밋메세지가 들어가 있습니다.

팀의 컨벤션이나, 취향에 따라 커밋메세지를 바꾸시면 됩니다. (안바꿔도 되구요)

그리고 커밋을 완료합시다.


자 이제 서버로부터 Pull도 하였고 충돌도 해결하고 Merge도 완료되었습니다.

즉 원격서버의 변경점이 내가 사용하는 로컬에 merge되었습니다


그럼 로컬에선 2가지 변경점이 생겼습니다. 내가 본래 커밋한 것 하나, 원격의 변경점을 머지 한 것 하나.

빨간박스를 확인하면 푸시 버튼에 2가 표시된걸 보실 수 있습니다.