일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 정처기
- github
- window11
- 취성패
- 방통대
- 방송대
- 자바
- git pull
- vmware workstation player
- 운영체제
- 오블완
- 소비통장
- window10
- ObjectMapper
- camel case
- git 설정
- 런던뮤지컬
- 취업
- snake case
- 티스토리챌린지
- IAMPORT
- java
- 아임포트
- window10 Education
- window11 Education
- 윈도우10 Education
- Spring Boot
- git
- git pull --rebase
- json string
- Today
- Total
홍차의 미로찾기
[git] 브랜치 합치기 (변경사항 통합) - merge, rebase 본문
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 옵션을 사용해서 다른 커밋으로 이동합니다.
'프로그래밍 > GIT' 카테고리의 다른 글
[github] github 의미와 사용하는 이유 (0) | 2024.07.20 |
---|---|
[github] github 보안 토큰 로그인 - Personal access token (0) | 2024.07.20 |
[git] git log 명령어와 옵션 - 커밋 히스토리 조회 (0) | 2024.07.10 |
[git] git branch 삭제가 안되는 이유 (0) | 2024.07.10 |
[git] git branch 명령어 - branch, switch (0) | 2024.07.10 |