본문 바로가기
나도 공부한다/git 사용법

git branch 만들기

by 꾸빵이 2021. 7. 13.

회사 프로젝트에 참여하고 있다고 가정하자. 프로젝트 코드를 과감하게 수정해보고 싶다. 그런데 마음대로 바꿨다가 큰일이 날 수도 있다. 이럴땐 어떻게 해야할까?? branch라는걸 만들어서 거기서 써주면 된다. branch는 똑같은 저장소를 하나 더 만들어주는거라고 생각하면 쉽다. 연습장이라고 생각해도 무방할듯 하다. git branch 만들고 싶은 branch 이름 으로 branch를 생성해주면 끝. branch를 만든 직후에는 이전의 branch와 동일한 파일이 들어가있다.

 

 

 

나는 my-B라는 이름으로 branch를 만들었다. git branch 명령어로 my-B가 성공적으로 만들어진걸 확인할 수 있다. my-B branch로 이동하여 작업을 하려면 git checkout이라는 명령어를 써야한다. git chechout my-B를 입력해주니 branch가 바뀌었다는 메세지가 뜬다. 여기서 잠깐!!! branch 생성과 동시에 해당 branch로 이동하고 싶을땐 git checkout -b 브랜치명 을 써주면 된다.

 

 

branch가 생성된 직후에는 기존 branch에 있던 파일들이 그대로 복사되므로 현재 상태는 이전과 같다.

 

 

 

여기서 branch 라는 파일을 새로 만들고 commit 해줬다. 다시 master branch로 이동해보자. my-B에 들어왔을때와 마찬지로 git checkout master 해주면 된다.

 

 

 

master로 이동하고 ls 명령어를 사용하여 파일 목록을 봤더니 branch라는 파일이 보이지 않는다. 아직 감이 잡히지 않은 분들을 위해 branch의 branch도 만들어보겠다.

 

 

 세번째 branch는 두번째 branch를 그대로 복사해오는 것이고 네번째 branch는 세번째 branch를···. 아무튼 나는 my-B branch에 들어가서 my_new-B라는 branch를 만들어봤다. 어쩌다가 branch 이름을 조금 더럽게(?) 지었다. 양해해주길 바란다.

위와 같은 방식으로 my_new-B에 들어가 my new라는 새 파일을 만들어주고 commit 했다.

 

다시 my-B branch로 돌아가서 파일 목록을 확인해보니 my_new 파일이 보이지 않는다.

 

 

만약 branch에서 수정한 내용이 너무 마음에 들어서 master branch로 가져오고 싶다면 어떻게 해야할까?? 두가지 방법이 있다. 첫번째는 git merge 명령어를 사용하는 방법이고, 두번째는 git rebase 명령어를 사용하는 방법이다.

git merge 방법부터 알아보자. 먼저, master branch로 이동한다. 그리고나서 git merge 합치고 싶은 branch 이름 을 입력하면 된다. 나는 my_new-B branch를 병합했다. 두 파일에 변화가 있었다는 것과, branch와 my_new 파일이 더해진걸 볼 수 있다.

 

 

 

git rebase 명령어를 사용하는 방법도 어렵지 않다. 위와 같이 해주면 되는데 merge 대신 rebase를 써준다. 두 명령어엔 무슨 차이가 있을까?? 어디서 분기하고 어디서 합쳐졌는지 보여주는 그래프를 살펴보자. 참고로 이건 sourcetree 라는 깃허브 관리 프로그램이다. 지금은 이렇게 한줄로 예쁘게 정리되어 있지만, 더 많이 병합하고 분기하다보면 그래프가 난잡해진다. 이걸 한줄의 그래프로 정리하고 싶을때 git rebase 명령어를 쓰는 것이다.

 

 

 

 

 

 

branch를 삭제하는 방법은 간단하다. git branch -D 브랜치 이름 명령어를 사용하면 된다.

그리고 branch를 사용할 때 주의해야할 점이 하나있다. 다른 branch에서 같은 파일을 수정하게될 경우에 충돌이 일어날 수 있다. 해결할 수 있는 충돌이지만 번거로우니.. 되도록이면 저런 상황이 생기지 않도록 하는게 베스트이다.

충돌이 일어나는 자세한 과정은 이렇다. A와 B가 다른 branch에서 같은 파일을 수정하였다고 가정하자. A가 먼저 파일을 push 하였고, B가 뒤따라 push 하였다. 그런데 B의 터미널에 push에 실패했다는 오류가 떴다. pull 할게 있으니 push가 불가능하다는 소리다. B는 원격 저장소에 새 작업이 올라왔음을 인지하고 pull 하였는데 이번엔 코드 창에 무언가가 떴다. A와 B가 수정한 파일의 중복되는 부분이다. 예를 들어 A가 "I'm hungry" 라고 고치고 B가 "I'm crazy" 라고 고쳤다면 코드창에는  "I'm hungry"와 "I'm crazy" 가 뜬다. 둘 중 하나만 선택하라는 뜻이다. 이 때 git status를 입력하면 오류 내용에 대해 더 자세하게 알 수 있다. 적당히 수정해준 후 commit과 push를 해주면 끝.

 

 

지금까지 로컬 저장소(git)에서 branch를 생성하는 방법을 알아봤다. 이 branch를 깃허브에도 업데이트 하고 싶은데.. 어떻게 해야할까?? 파일을 깃허브에 올릴 때 처럼, git push origin 브랜치명을 입력하면 된다. 

 

 

 

이렇게 하고나서 깃허브를 새로고침하면 브랜치가 하나 늘어나있다. 왼쪽은 push 이전이고 오른쪽은 push 이후.

 

 

 

브랜치를 변경해보면 파일들도 잘 올라가있는걸 확인할 수 있다.

 

 

 

앞에서 git branch 명령어로 어떤 branch가 있는지 확인하고는 했었다. 이 명령어에 -a(all 이라는 뜻) 옵션을 붙이면 로컬뿐만 아니라 원격 저장소(깃허브)의 branch도 확인할 수 있다. 만약 push를 해줬는데도 터미널에 뜨지 않는다면 git fetch를 입력하고 다시 확인해보자.

 

 

이제 원격 저장소의 브랜치를 로컬 저장소에 불러오는 방법을 알아보자.

git checkout -b (로컬에 만들 branch명) origin/(불러오려는 원격 branch명) 명령어를 사용한다. git branch로 확인할 수 있다. 또, 왼쪽에 있는 파일 목록을 보면 my-B에 있던 파일들이 옮겨진걸 확인할 수 있다.

 

 

 

원격 저장소에 있는 branch를 지우고 싶을때에는 git push -d origin 삭제하려는 branch명 을 사용한다.