Git Merge 및 Rebase 튜토리얼
이 튜토리얼에서는 Git에서 브랜치를 병합하는 기본 방법과 각 병합 방식의 차이점을 알아봄.
기본 모드인 3-Way Merge와 Fast-Forward Merge, 그리고 Rebase 의 사용법을 익히는 게 목적임.
2024.05.26 - [utils/git and github] - [Git] merge mode: merge and rebase.
2024.05.26 - [utils/git and github] - [Git] merge: branch를 합침
사전 준비
새로운 Git 저장소 생성
# Git 설치 확인
git --version
# 새로운 Git 저장소 생성
mkdir my-git-repo
cd my-git-repo
git init
예제 시나리오 설정
Step 1: 기본 브랜치 생성
먼저, main
브랜치에서 초기 커밋을 만듦.
# README 파일 생성
echo "This is the main branch" > README.md
git add README.md
git commit -m "Initial commit on main"
Step 2: Feature 브랜치 생성 및 커밋
feature
브랜치를 생성하고, 몇 가지 커밋을 만듦.
# feature 브랜치 생성 및 전환
git switch -c feature
# feature 브랜치에서 파일 수정 및 커밋
echo "This is the feature branch" > feature.txt
git add feature.txt
git commit -m "Add feature.txt file"
echo "More work on the feature branch" >> feature.txt
git add feature.txt
git commit -m "Update feature.txt with more work"
Step 3: Main 브랜치로 돌아가서 작업
다시 main
브랜치로 돌아가서 작업을 추가함.
git switch main
echo "Some updates on main branch" >> README.md
git add README.md
git commit -m "Update README.md on main"
1. 기본 병합 모드 (3-Way Merge)
이제 feature
브랜치를 main
브랜치에 병합함. 이 경우 기본적으로 3-Way Merge가 수행됨.
git switch main
git merge feature
결과 확인
git log --graph --oneline --all
이 명령어를 사용하여 병합 결과를 확인하면, 새로운 병합 커밋이 생성된 것을 볼 수 있음.
2. Fast-Forward Merge
Fast-Forward Merge는 병합 대상 브랜치가 기준 브랜치의 자식(commit)인 경우에만 가능함. 이를 시연하기 위해 새로운 브랜치를 생성하고 병합함.
# 새로운 브랜치 생성 및 전환
git switch -c fast-forward-branch
# 파일 추가 및 커밋
echo "This is a fast-forward branch" > fast-forward.txt
git add fast-forward.txt
git commit -m "Add fast-forward.txt file"
# main 브랜치로 전환
git switch main
# fast-forward 브랜치를 병합
git merge fast-forward-branch
결과 확인
git log --graph --oneline --all
이 명령어를 사용하여 병합 결과를 확인하면, 새로운 병합 커밋 없이 fast-forward로 병합된 것을 볼 수 있음.
참고: Fast-Forward 병합 강제
Fast-Forward 병합을 강제하고 싶다면 --ff-only
옵션을 사용함.
# Fast-Forward 병합이 가능하지 않으면 병합을 중단함
git merge --ff-only feature
3. Rebase
Rebase는 커밋 히스토리를 깔끔하게 유지하기 위해 자주 사용됨.
rebase
는 병합 명령어로 수행되지 않지만, 브랜치를 병합하는 데 사용됨.
remote repository를 사용하는 경우 사용을 가급적 피해야 함.
외부에 공개된 commit을 수정하는 경우엔 revert를 사용할 것.
Rebase에 대한 좀 더 자세한 tutorial은 다음을 볼 것.
2024.05.28 - [utils/git and github] - [Git] rebase: Tutorial
상황 설정
먼저, main
과 feature
브랜치가 각각 독립적으로 커밋된 상태를 만듦.
# main 브랜치에서 작업
git switch main
echo "Main branch work" >> main.txt
git add main.txt
git commit -m "Add main.txt on main"
# feature 브랜치에서 작업
git switch feature
echo "Feature branch work" >> feature.txt
git add feature.txt
git commit -m "Update feature.txt on feature"
Rebase 수행
이제 feature
브랜치를 main
브랜치로 재배치(rebase)함.
git switch feature
git rebase main
이 명령을 실행하면 feature
브랜치의 커밋이 main
브랜치의 최신 커밋 위로 재배치됨.
결과 확인
git log --graph --oneline --all
이 명령어를 사용하여 rebase 결과를 확인하면, feature
브랜치의 커밋이 main
브랜치의 최신 커밋 위로 재배치된 것을 볼 수 있음.
Rebase 후 병합 (Fast-Forward Merge)
Rebase 후 main
브랜치에 병합함. 이 경우 Fast-Forward 병합이 수행됨.
git switch main
git merge feature
결과 확인
git log --graph --oneline --all
이 명령어를 사용하여 병합 결과를 확인하면, Fast-Forward 병합이 수행되어 새로운 병합 커밋 없이 병합된 것을 볼 수 있음.
결론
이 튜토리얼에서는 Git에서 브랜치를 병합하는 세 가지 주요 방식을 배웠음.
- 기본 모드인 3-Way Merge는 새로운 병합 커밋을 생성하며,
- Fast-Forward Merge는 브랜치를 일직선으로 배치하여 새로운 병합 커밋 없이 병합함.
- Rebase는 커밋 히스토리를 깔끔하게 유지하는 데 유용하며, rebase 후 Fast-Forward Merge를 통해 병합할 수 있음.
관련하여 읽어보면 좋은 자료들
2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)
2024.05.26 - [utils/git and github] - [Git] git 에서 branch란?
2024.05.26 - [utils/git and github] - [Git] merge: branch를 합침
'utils > git and github' 카테고리의 다른 글
[Git] pull and fetch (0) | 2024.05.26 |
---|---|
[Git] push (0) | 2024.05.26 |
[Git] merge mode: merge and rebase. (0) | 2024.05.26 |
[Git] merge: branch를 합침 (0) | 2024.05.26 |
[Git] git 에서 branch란? (0) | 2024.05.26 |