본문 바로가기
utils/git and github

[Git] Tutorial: 3-way merge, fast forward, and rebase

by ds31x 2024. 5. 26.

Git Merge 및 Rebase 튜토리얼

이 튜토리얼에서는 Git에서 브랜치를 병합하는 기본 방법과 각 병합 방식의 차이점을 알아봄.

 

기본 모드인 3-Way Merge와 Fast-Forward Merge, 그리고 Rebase 의 사용법을 익히는 게 목적임.

 

2024.05.26 - [utils/git and github] - [Git] merge mode: merge and rebase.

 

[Git] merge mode: merge and rebase.

Git Merge MethodsGit은 branch를 기반으로 병합을 수행함.대표적인 병합 방식으로는 Fast-Forward Merge, 3-Way Merge, Rebase가 있음.1. Fast-Forward MergeFast-Forward Merge는 순차적인 commit에 맞춰 병합하는 방식임.한 사

ds31x.tistory.com

2024.05.26 - [utils/git and github] - [Git] merge: branch를 합침

 

[Git] merge: branch를 합침

git merge merge는 두 개 이상의 브랜치를 병합하는 데 사용되는 Git 명령어 각각의 branch에서 작업을 수행하고 각 작업이 완료가 되면 해당 작업들을 마무리하고 기존 branch와의 merge를 수행하게 됨.

ds31x.tistory.com


사전 준비

새로운 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

 

[Git] rebase: Tutorial

Git rebase 튜토리얼Rebase는 커밋 히스토리를 깔끔하게 유지하기 위해 자주 사용됨.rebase는 병합 명령어로 수행되지 않지만, 브랜치를 병합하는 데 사용됨.remote repository를 사용하는 경우 사용을 

ds31x.tistory.com


상황 설정

먼저, mainfeature 브랜치가 각각 독립적으로 커밋된 상태를 만듦.

# 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 (작성중)

 

[Git] Git Summary (작성중)

git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local rep

ds31x.tistory.com

2024.05.26 - [utils/git and github] - [Git] git 에서 branch란?

 

[Git] git 에서 branch란?

Git Branch의 개념Git에서 branch는 프로젝트를 독립적으로 관리할 수 있도록 해주는 중요한 기능임.branch를 통해 안정된 코드와 개발 중인 코드를 구분하여 관리할 수 있게 해줌. Branch를 통해동일한

ds31x.tistory.com

2024.05.26 - [utils/git and github] - [Git] merge: branch를 합침

 

[Git] merge: branch를 합침

git merge merge는 두 개 이상의 브랜치를 병합하는 데 사용되는 Git 명령어 각각의 branch에서 작업을 수행하고 각 작업이 완료가 되면 해당 작업들을 마무리하고 기존 branch와의 merge를 수행하게 됨.

ds31x.tistory.com


 

'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