지나공 : 지식을 나누는 공간

그림으로 보는 Git Branch 0 : git의 구조와 주요 명령어 알기 본문

Tech/Git

그림으로 보는 Git Branch 0 : git의 구조와 주요 명령어 알기

해리리_ 2020. 9. 2. 16:42

본 포스팅은은 Learn Git Branching의 내용을 참고했습니다.

 

git의 구조

 

git 구조

밑줄 친 문장은 실제 명령어입니다.

 

commit

 

commit은 변경이나 추가를 할 때마다 변경사항을 저장소에 기록하는 스냅샷입니다.

처음에 c1이 있는데 이에 대해 변경을 하고 git commit을 하면 c1을 부모로 하는 새 커밋 c2가 생깁니다.

 

git commit

 

branch

 

브랜치는 특정 커밋에 대한 참조인데, 많이 만들어도 메모리나 디스크 공간에 부담이 안 됩니다.

git branch newImage라는 명령을 통해 진행중이던 내용에 대해 branch를 만들 수 있습니다. 만들기만 하고 branch 위치에서 commit을 안하면 같은 commit에 대한 branch만 존재하는, 아래와 같은 모습이 됩니다. 

 

git branch newImage

 

브랜치와 마스터 둘 다에서 작업이 가능한데 master의 위치에서 변경을 한 뒤 commit을 하면 브랜치는 그대로 있고 master만 변경이 되어 스냅샷이 생깁니다. 반면 위 사진과 같은 상황에서 master*위치가 아닌 branch로 위치를 옮겨서 (git checkout newImage) commit(git commit)을 하면 두 번째 사진과 같은 모습이 됩니다. 아래 두 사진은 순차적인 사진이 아닙니다. branch를 만든 뒤에 각각 다른 명령어를 입력한 뒤의 모습입니다.

master*위치에서 git commit한 모습
newImage*위치에서 commit할 때

 

 

merge

 

merge는 합치는 동작인데 두 개의 부모를 가리키는 commit을 만들어 냅니다. (두개를 합친 commit이니 잘 생각해보면 당연히 두 개의 부모를 가리킬 겁니다.ㅎㅎ)

 

 

위와 같이 bugFix라는 브랜치가 있는 상태일 때 master의 위치에서 git merge bugFix 를 하면, 아래처럼 bugFix와 기존 master가 합쳐진 master*가 생깁니다. 새로 생긴 master커밋은 bugFix, 그리고 기존 master였던 커밋 이렇게 두 개의 부모를 가리킵니다. 현재 위치가 A일 때, git merge B를 하면 B를 A로 가져옵니다. 

 

master*의 위치에서 git merge bugFix를 통해 브랜치를 합친 경우

위의 사진의 상태라면 master에는 bugFix와 기존 master가 합쳐진 내용이 있고, bugFix는 master의 변경사항이 적용이 안된 내용이 있으므로 bugFix와 master의 내용이 다릅니다. 따라서 bugFix브랜치의 내용도 master와 동일하게 하기 위해 git checkout bugFix; git merge master를 해주면 아래와 같은 모습이 됩니다. 

 

 

rebase

 

rebase는 커밋들을 모아서 복사한 뒤 다른 곳에 떨구는 것입니다.

초기상황

 

bugFix 브랜치에서 작업을 했는데 여기서 git rebase master를 하면 아래 그림처럼 bugFix*가 master의 위로 올라옵니다. 본래 bugFix엿던 c3는 어딘가에 남아 있는 상태고 이를 복사한 c3' 이 생겨서 master위에 생깁니다. 

 

bugFix에서 git rebase master를 한 모습

여기서 master를 bugFix 위치로 옮기기 위해 master로 가서 git rebase bugFix를 하면 아래 모습과 같아집니다.

 

 

 

 

 

728x90
Comments