본문 바로가기

프로그래밍/Git

[Git] 내가 아는 Git 3 - branch, merge, fetch, pull,

안녕하세요. 

저번 시간에는 Add, Commit, Push에 대해 배웠습니다. 

이번에는 Branch, Merge, Fetch, Pull 에 대해 배워봅시다 !

 


4. Branch : 가지


Git을 처음에 생성하면 master라는 기본 branch 가 자동으로 생성됩니다.
master라는 뿌리(root branch)에서 여러 branch를 생성할 수 있습니다.

 

 

사진에서는 dev라는 branch에서 login이라는 가지가 파생되었네요.


branch는
여러 사람과 작업할 때 서로 코드가 충돌(Conflict) 되지 않게 하거나, 
새로운 기능을 테스트를 할 때 사용할 수 있습니다.

 

 

5. Pull, Fetch

이 두 개의 명령어는 원격 저장소(Remote Repository)에서 변경사항을 가져오는 것을 말합니다.

둘 다 변경사항을 가져오는 것은 동일하지만, 
pull은 원격 저장소(Remote Repository)에서 변경내역을 가져와 현재 branch(working branch) 에 변경된 내용을 업데이트 한다는 것이 차이점 입니다.

 

여기서 현재 branch(working branch)는 말그대로 지금 활성화된/사용하고 있는 branch를 의미합니다. 

Sourcetree에선 왼쪽 탭의 Branches 하위에 O 표시되어 있는 branch가 현재 branch(working branch) 입니다. 


개인적으로 pull은 현재 branch의 변경사항을 업데이트할 때 사용하고, 

fetch는 전체 다른 branch에 변경사항이 있을 때, 전체 상황 파악을 위해 사용합니다. 

 

 

6. merge : 합치다 (병합)

 

branch와 branch를 합치는 것을 말합니다.

dev branch의 소스코드와 dialog branch의 소스코드를 합치고 싶을 때 사용합니다. 

 

 

merge를 시도하기 전에 반드시 현재 branch (working branch)를 확인해야 합니다. 

현재 branch가 merge될 ! branch 이기 때문입니다. 

처음 merge를 할 때 "어디에서 어디로 merge해야 하는가?" 를 헷갈리는데, 

일반적으로는 메인 branch (master 또는 dev) 에 merge 합니다.

이때도 현재 branch 가 어디인가 ! 만 신경써주시면 됩니다. 

 

만약, master branch에 login-test branch를 merge 하고 싶다면 (sourcetree에서)

1) master branch를 working branch로 한다. 

2) login-test branch 의 마지막 commit 위치를 찾는다.

3) 해당 위치를 우클릭을 해서 merge를 클릭한다. 

로 진행하면 됩니다. 

 

merge를 시도할 때 충돌(Conflict)이 발생할 수 있습니다.

충돌(Conflict)이란 특정 파일의 같은 라인에서 변경사항이 중첩되었을 때

Git이 둘 중에 어떤 소스코드를 우선으로 사용해야할지 모르기 때문에 나타나는 문제를 말합니다. 

 

 

충돌(Conflict)이 발생했을 경우 반드시 해당 문제를 해결한 후에 변경사항을 push 해야 합니다. 

충돌은 IDE에서 코드를 수정해서 해결하거나 SourceTree의 Resolve Conflict(충돌 해결하기) 기능을 사용해 해결할 수도 있습니다.

 

Resolve Conflict(충돌 해결하기) 에는 두 가지 선택사항이 있습니다. 

Resolve Using "Mine" (내 브랜치의 변경사항을 유지할 것인지?) 또는 

Resolve Using "Theirs" (병합한 브랜치의 변경사항을 적용할 것인지?)

 

이때도 현재 브랜치(working branch)가 중요합니다. 

현재 브랜치의 변경사항을 따를 것인지 아니면 병합한 브랜치의 변경사항을 따를 것인지만 결정해주면 됩니다. 

 


* 중요 *

 

Git을 사용하여 협업할 때 가장 중요한 점은 순서입니다. 

 


먼저 다른 사람의 작업을 Pull 해야 합니다. 

소스코드의 변경사항을 적용한 후 작업을 진행해야 하기 때문입니다. 
만약 다른 사람의 변경사항을 가져오지 않고 작업 한 후 
commit, push 할 경우 프로젝트에 충돌(Conflit) 이 발생할 수 있습니다. 

작업이 완료된 후에는 main branch 에 내 branch 변경사항을 merge 하고

반드시 충돌을 해결한 후 push 해야합니다. 
다른 사람이 변경된 코드를 pull 받고 작업을 할 때 충돌나지 않아야 하기 때문입니다.

 

봐주셔서 감사합니다 :)

 

'프로그래밍 > Git' 카테고리의 다른 글

[Git] 내가 아는 Git 5  (0) 2020.08.30
[Git] 내가 아는 Git 4 - rebase, reset, stash  (0) 2020.08.26
[Git] 내가 아는 Git 2 - 영어 단어  (0) 2020.08.24
[Git] 내가 아는 Git 1 - Intro  (0) 2020.08.24