본문 바로가기
DevOps/Git

[Git] branch / merge / rebase

by sihyeong 2022. 10. 23.

Branch

  • 독립적으로 작업을 진행하기 위한 개념이다.
  • 브랜치는 다른 브랜치의 영향을 받지 않아 여러 작업을 동시 진행 가능
생성
git branch 브랜치명

삭제
git branch -d 브랜치명

조회
git branch

이동(사용)
git switch 브랜치명

생성, 이동
git switch -c 브랜치명

브랜치명 변경
git branch -m 기존브랜치명 새브랜치명
  • 이전에 이동을 배울 땐 checkout 이었으나 이것의 용도가 매우 다양해 switch, restore로 분리해서 사용함

 

Branch 합치는 방법 2가지

1. merge

특징

  • branch의 흔적을 남기며 합침
  • merge 시 merge 했다는 commit 흔적을 남기며 합침

빨간선이 merge 흔적

 

merge 사용법

git merge 대상브랜치명

 

  • main branch와 sub branch가 있다고 가정했을 때 sub branch의 내용을 main에 merge 하고 싶을 경우, main branch에서 git merge sub 처럼 입력해야지 merge 수행됨
명령어
	git merge 서브대상브랜치명

가정 1. main, new-branch가 있다
	 2. new-branch[서브 대상 브랜치]의 내용을 main[주 대상 브랜치]에 붙인다

   
위의 상황에서 merge 방법

1. git switch main  (main [주 대상 브랜치]로 이동)

2. git merge new-branch  (merge 수행)

 

merge 주의사항

출처 : Git Merge vs. Rebase: What’s the Diff? - Medim

  • branch가 엄청 많아지면 보기 힘들어짐

 

2. rebase

특징

1. branch 흔적을 남기지 않고 합치는 곳 이후에 branch의 작업 내역을 뒤이어 붙임

따로 흔적 없이 작업내용이 붙는다.

rebase 사용법

명령어
	git rebase 주대상브랜치명

가정 1. main, new-branch가 있다
	 2. new-branch[서브 대상 브랜치]의 내용을 main[주 대상 브랜치]에 붙인다

   
위의 상황에서 rebase 방법

1. git switch new-branch  (new-branch [서브 대상 브랜치]로 이동)

2. git rebase main  (main 수행)

 

 

 

rebase 주의사항

 

1. 충돌 문제

다른 브랜치의 작업을 이어 붙이는 작업이라 다른 브랜치와 현재 브랜치의 작업 내역이 다르면 충돌 해결을 해야한다.

 

충돌을 적절히 해결한 후

git add .

를 통해 변경사항을 적용한 뒤

git rebase --continue

를 통해 rebase를 계속 진행할 수도 있고

git rebase --abort

를 통해 rebase를 중단할 수도 있다.

 

 

만약 변경내용이 모두 rebase되는 branch(main)모두 같다면 commit내역에 다른 브랜치의 커밋 내역이 남지 않는다

 

2. branch 추적 위치 문제

new-branch를 main 위에다가 rebase 했기에 main보다 new-branch가 더 위에 있는 문제가 생긴다.

 

원래의 의도대로라면 main,new-branch가 최상단의 커밋 내역을 가리키고 있어야 할텐데 말이다.

 

git switch main
git merge new-branch

를 수행하게 된다면 main과 new-branch가 같은 위치를 가리키게 된다.

 

 

 

참고사항

합치고 더이상 수정할게 없는 브랜치는 삭제해줘도 됨

삭제하면 그 브랜치에서 작업은 불가능한데
그 브랜치에서 작업내역으로는 이동이 가능함

 

'DevOps > Git' 카테고리의 다른 글

[Git] 원격저장소  (0) 2022.10.23
[Git] merge /rebase 충돌(conflict)  (0) 2022.10.23
[Git] revert / reset  (0) 2022.10.23
[Git] 기초 사용법 복습  (0) 2022.10.23
[Git] Git 초기설정 (VisualStudio Code)  (0) 2022.10.22