본문 바로가기
Git & GitHub

[Git] Branch

by 사장님나빠여 2022. 4. 5.

※Branch : 분기된 가지(다른차원)

-프로젝트를 하나 이상의 모습으로 관리해야 할 때 ex)실배포용, 테스트서버용, 새로운 시도용

-여러 작업들이 각각 독립되어 진행될 때 ex)신기능1, 신기능2, 코드개선, 긴급수정... / 각각의 차원에서 작업한 것을 메인에 통합 등

-이 모든 것을 하나의 프로젝트 폴더에서 진행할 수 있게 함

-각각의 작업을 서로 다른 차원에서 작업 후 적용이 확정된 것을 메인브랜치로 가져와서 사용자에게 선보일 수 있다.

 

#여러 branch 만들어보기

※ 브랜치 생성 / 이동 / 삭제하기

-git branch 브랜치이름 : '브랜치이름'이라는 이름의 브랜치 생성

소스코드에서 확인하면 이렇게 보인다

-git branch 로 branch 목록과 현재 branch를 알 수 있음(* branch 이름으로 표시)

-git switch 이동할 브랜치 : '이동할 브랜치'로 이동(Git 2.23부터는 checkout명령어가 switch, restore로 분리)

-git switch -c 생성할브랜치명 : 브랜치 생성과 동시에 이동하기

-git branch -d 삭제할브랜치명 : 해당 브랜치 삭제
-git brahcn -D 강제삭제할브랜치명 : 지워질 브랜치에만 있는 내용의 커밋이 있을 경우(다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때)

-git branch -m 기존브랜치명 새로운브랜치명 : 새로운 브랜치명으로 이름 바꾸기

 

※결과 확인하기

-각 브랜치에서 수정, 파일 생성 후 각각 커밋을 하고 그 내역을 git log에서 각 branch마다 다르게 살펴볼 수 있고, 여러 브랜치의 내역을 편리하게 보려면 git log --all --decorate --oneline --graph로 확인할 수 있다.(텍스트)

-소스코드에서는 이보다 더 편하게 한눈에 들어오게 볼 수 있다.

 

#branch를 합치는 두 가지 방법(merge, rebase)

※ 서로 다른 브랜치를 합치는 두 방식

@merge : 두 브랜치를 한 커밋에 이어붙인다(히스토리o)

-브랜치 사용내역을 남길 필요가 있을 때 적합한 방식

-다른 형태의 merge에 대해서도 이후에 다룸

-합쳐진 브랜치에는 두가지 다른 브랜치의 모든 작업들이 담기게된다

 

@rebase : 브랜치를 다른 브랜치에 이어붙인다(히스토리x)

-한 줄로 깔끔히 정리된 내역을 유지하기 원할 대 적합

-이미 팀원과 공유된 커밋들에 대해서는 사용하지 않는 것이 좋다.

 

1. merge로 합치기

주가 되는 브랜치를 A라고 하고 합칠 브랜치를 B라고 하면 브랜치 A로 이동 후 B를 merge해주면 된다.

ex)add-coach 브랜치를 main 브랜치로 merge

-main 브랜치로 이동

- git merge 합칠브랜치이름 명령어로 병합 -> git merge add-coach

-소스트리에서 확인

-merge는 reset으로 되돌리기 가능

git branch -d 머지된브랜치이름 병합된 브랜치는 삭제 -> git branch -d add-coach

 

2.rebase로 합치기 - merge와 반대

ex)new-teams 브랜치를 main브랜치와 rebase

-rebase할 브랜치로 이동(git switch rebase할브랜치)

-git rebase 합칠브랜치이름 명령어로 병합 -> git rebase main

-rebase한 new-teams보다 main브랜치가 뒤쳐져 있다.

-main을 new-teams위치로 옮겨주기 위해서 merge를 해야 한다 -> git merge new-teams

 

#브랜치 간 충돌 해결하기(파일의 같은 위치에 다른 내용이 입력된 상황)

1. merge 충돌 해결하기

-오류 메세지와 git status 확인

-VS Code에서 해당 부분 확인

-충돌한 부분이 많아 merge를 중단하겠다 하면 git merge --abort 명령어를 사용해서 merge 중단

-충돌한 부분에서 아래 보기들을 사용해도 되고 직접 수정도 가능

  Accept Current Change : 해당 옵션을 선택할 경우 현재 위치한 branch의 수정사항을 갖고간다. 
  Accept Incoming Change : 해당 옵션을 선택할 경우 merge한 branch의 수정사항을 갖고간다. 
  Accept Both Changes : 해당 옵션을 선택할 경우 두 branch 모두의 수정사항을 갖고 간다. 
  Compare Changes : 해당 옵션을 선택할 경우 충돌된 부분을 확인하기 위한 화면을 split해서 보여준다.

-수정이 끝나면 git add . , git commit -m 커밋메세지 또는 git commit 후 자동 입력메세지가 뜨면 :wq로 저장 후 종료

 

2. rebase 충돌 해결하기

-충돌과정을 따로따로 차례로 해결해줘야 한다

-git switch rebase할브랜치 로 이동 후 git rebase 합칠브랜치 를하면 오류가 뜨고 git status로 확인을 하면 이유를 확인할 수 있다.

-당장 충돌 해결이 어려울 경우 git rebase --abort 명령어로 merge 중단

-충돌한 부분을 수정한 뒤 git add. 해준다.

-오류가 여러개일 경우 한개 해결 후 git rebase --continue 명령어로 작업을 계속

-모든 충돌을 해결하면 git add . , git commit 해준다.

'Git & GitHub' 카테고리의 다른 글

[Git] GitHub / push & pull  (0) 2022.04.06
[Git] 시간 여행하기  (0) 2022.04.04
[Git] Git 시작하기  (0) 2022.04.03

댓글