홍차의 미로찾기

[git] 브랜치 합치기 (변경사항 통합) - merge, rebase 본문

프로그래밍/GIT

[git] 브랜치 합치기 (변경사항 통합) - merge, rebase

홍차안디 2024. 7. 12. 01:49
반응형

[git] git 설정 프로세스 모음

 

 

 

merge와 rebase 명령어는 브랜치를 합치는 명령어 입니다.

다만 두 방식의 차이점이 존재합니다.

 

merge

두 브랜치를 병합하여 하나의 브랜치로 만듭니다.

병합 시점에 커밋을 생성하여 기록하며, 병합 커밋 이전의 기록들도 유지되기때문에 원래 히스토리를 보존할 수 있습니다.

다만, 브랜치를 많이 사용하는 프로젝트의 경우에는 히스토리 내역을 파악하기 어려울 수 있다는 단점이 존재합니다.

충돌 시에는 모든 커밋의 충돌을 한 번에 해결 후 병합이 가능합니다.

rebase

한 브랜치의 커밋다른 브랜치의 커밋 이후로 하나씩 이어붙입니다.

한 줄로 깔끔하게 히스토리를 유지할 수 있고, 새로운 커밋이 기존 커밋 위로 순차적으로 쌓이도록 할 수 있습니다.

다만 기존 커밋 히스토리가 삭제되고, 새롭게 커밋이 이어붙여지는 것이기 때문에 이미 동료에게 공유된 커밋에 대해서는 사용하지 않는 것이 좋습니다.

또한, 병합시 충돌은 각 커밋이 재적용될 때마다 해결해야합니다.

 

 

→ merge와 rebase 작업이 완료된 브랜치는 삭제하도록 합니다.

 

 


 

 

merge

 

충돌이 없는 경우 (merge)

# first 브랜치 커밋을 main 브랜치로 병합
main >> git merge first

 

만약 merge를 중단하려고 한다면 reset을 사용합니다.

# merge 중단 -> merge 전 마지막 브랜치로 이동 가능
git reset --hard

 

 

충돌이 있는 경우 (merge)

# first 브랜치 커밋을 main 브랜치로 병합
main >> git merge first

 

만약 충돌이 일어난다면 코드를 편집해서 해결합니다.

만약 merge 충돌 시, 중간에 중단하고 싶다면 --abort 옵션을 사용합니다.

# merge 중단
git merge --abort

 

충돌 해결 후 커밋합니다.

# merge 충돌 해결 후 커밋
git add .
git commit

 

commit 명령 시, 커밋 메세지는 ‘merge~’ 로 자동 입력됩니다.

( :wq 저장 후 나가기)

 

 

rebase

 

충돌이 없는 경우 (rebase)

# second 브랜치 내용을 main으로 병합
second >> git rebase main

# main으로 이동해서 second rebase 내역 main에 병합
main >> git merge second

 

 

충돌이 있는 경우 (rebase)

 

# second 브랜치 내용을 main으로 병합
second >> git rebase main

 

충돌 발생 시, 충돌 해결

# 충돌 변경사항 저장
second >> git add .

# 커밋이 여러개인 경우 다음 커밋 이동
second >> git rebase --continue

# 충돌 해결 완료 시
main >> git merge second

 

merge와는 달리 rebase에서는 여러 개의 커밋이 존재하는 경우, 각 커밋마다 충돌을 해결해야합니다.

각 커밋마다 충돌 해결 후 --continue 옵션을 사용해서 다른 커밋으로 이동합니다.

반응형
Comments