본문 바로가기

DevOps/Git

Git, GitHub 사용하기 기초 2(Branch, merge, rebase)

개인 공부를 하며 정리한 글입니다.

틀린 부분, 수정할 부분이 있다면 언제든 피드백 환영입니다 :)

 

1편에서 시간 관리에 대해 알아보았다면, 2편에서는 차원관리에 대해 알아보겠습니다.


 

1.   Branch : 분기된 가지 (차원 관리)


폴더명 뒤, (main)이 현재 위치의 브런치를 말한다.

 

파란색이 main 분홍, 녹색은 다른 목적을 위해 생성된 다른 버전의 프로젝트

 

  • 프로젝트를 하나 이상의 모습으로 관리해야 할 때
    • 예) 실배포용, 테스트서버용, 새로운 시도용
  • 여러 작업들이 각각 독립되어 진행될 때
    • 예) 신기능 1, 신기능 2, 코드개선, 긴급수정...
    • 각각의 차원에서 작업한 뒤 확정된 것을 메인 차원에 통합

 


2.   Branch 생성,  이동, 삭제하기


 

1) Brach 생성

# add-coach 란 이름의 Branch를 생성
$ git branch add-coach
# Branch 목록 확인
$ git branch

현재존재하는 Branch 리스트를 보여준다. 별표는 현재 Branch 위치

 

 

2) Branch 이동

# 현재의 main Branch에서 add-coach Branch로 이동하기
$ git switch add-coach

add-coach Branch로 이동한 것을 확인 가능하다.

 

  • 기존의 checkout 명령어가 Git 2.23 버전부터 switch, restore,checkout  3개로 분리

 

📢 브랜치 생성과 동시에 이동하기

$ git switch -c 새 브랜치명

 

 

3) Branch 삭제

$ git branch -d (삭제할 브랜치명)

 

 

📢 독립 브랜치 삭제하기

 

지워질 브랜치에만 있는 내용의 커밋이 있을 경우
즉 다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때는
-d 대신 -D(대문자)로 강제 삭제해야 합니다.

$ git branch -D (강제삭제할 브랜치명)

 

 

4) Branch 이름 변경

$ git branch -m (기본 브랜치명) (새 브랜치명)

 

 


3.   결과 살펴보기


기존의 git log 명령어는  위치한 브랜치에서의 내역만 볼 수 있는 단점이 있었다.

 

여러 브랜치의 내역 편리하게 보려면 아래의 명령어를 입력하면 된다.

$ git log --all --decorate --oneline --graph

 


4.   Branch 합치는 2가지 방법


 

merge rebase
 두 브랜치를 한 커밋에 이어붙인다. 브랜치를 다른 브랜치에 이어붙인다.
브랜치 사용내역을 남길 필요가 있을 때 적합한 방식 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합
메인 브랜치에서 실행 서브 브랜치에서 실행
  이미 팀원과 공유된 커밋들에 대해서는 사용하지 말 것

 

1)  merge

 

먼저 merge할 브랜치(여기서는 main 브랜치)로 이동

 

git merge 현재 브랜치와 합칠 브랜치명
  • merge도 commit 의 일종이므로 reset 이 가능하다.
  • merge하기 전 해당 브랜치의 마지막 시점으로

 

1-1 )  병합된 브랜치 삭제

git branch -d 삭제할 브랜치명

브랜치 삭제 후, 소스트리로 확인해보면 add-coach가 사라진 걸 알 수 있다.

 

 

2) Rebase

 

❗ merge와는 반대로 메인이 아닌 서브 Branch에서 실행해야 한다.

$ git rebase main

남은 new-teams 브랜치로 가서 실행.

아래에 있던 new-teams 브랜치가 main 브랜치 위로 올라가 한줄이 된 걸 확인 가능.

 

하지만 여기서 문제점이 있다. main 브랜치가 뒤쳐저 있는 상황이 발생해버린 것이다.

즉, main 브랜치에서는, new teams에서 작업한 add team Pumas, add team Jaguars  2 개가

반영이 안된다는 것이다.

 

이럴 경우는 main 브랜치에서 new-teams를 merge 해버리면 된다.

# main 브랜치에서
$ git merge new-teams

new-teams의 추가사항이 main에 업데이트 완료

한줄요약 : rebase 적용 후, 메인 브랜치에 가서 merge 필수


 

5.   Branch 충돌 해결


1)  merge 충돌 해결하기

  • 파일의 같은 위치에 다른 내용이 입력된 상황

 

 

VScode에서는 아래 빨간 박스 부분의 선택지를 골라서 실행하면 된다.

<<<<< : 메인 브랜치

>>>>> : 서브 브랜치

txt 파일에서 작업한다면 필요한 부분 (여기서는 4 or 6 행) 만 남기고 3 ~ 7열 사이를 다 지우면 된다.

 

만약 충돌이 너무 많아 당장 merge는 하지 않고 중단시키려고 한다면,

$ git merge --abort

 

해결 가능 시 충돌 부분을 수정한 뒤 git add ., git commit으로 병합 완료

 

main 과 conflict1이 병합되었다.


 

2)  rebase 충돌 해결하기

 

merge와 마찬가지로 충돌된 부분에서 선택지를 골라주는 흐름은 같다 .

단 명령어의 차이가 있을 뿐이다.

  • 오류 메시지와 git status 확인

 

당장 충돌 해결이 어려울 경우 아래 명령어로 merge 중단

$ git rebase --abort

 

해결 가능 시

  • 충돌 부분을 수정한 뒤 git add .
  • 아래 명령어로 계속
$ git rebase --continue
  • 충돌이 모두 해결될 때까지 반복

 

그리고 상단에서 배운 

한줄요약 : rebase 적용 후, 메인 브랜치에 가서 merge 필수

이것도 빼먹지 말자.

 


 

위와 같은 결과를 실습하면서 보시고 싶으시면 얄코님의 Git & GitHub강의를  참고해주세요.

https://youtu.be/1I3hMwQU6GU

https://www.yalco.kr/@git-github/0-1/