
Git
Git은 분산형 버전 관리 시스템(DVCS, Distributed Version Control System)으로, 코드의 변경 이력을 효율적으로 관리하고, 여러 개발자가 동시에 협업을 진행할 수 있도록 돕는 도구다.
특징
- 로컬 저장소에 전체 이력을 보관하며, 오프라인에서도 작업 가능하다.
- Branch, Merge 기능으로 병렬 개발 및 통합에 용이하다.
- GitHub, GitLab 같은 원격 저장소 서비스와 결합해 오픈소스와 기업 프로젝트에서 표준으로 활용된다.

Branch
Git에서 Branch는 독립된 작업 공간을 의미한다. 메인 코드에 영향을 주지 않으면서 새로운 기능 개발과 버그 수정을 진행할 수 있으며, 필요하면 다른 branch와 병합(Merge)하여 코드에 반영할 수 있다.
장점
- 실험적 기능 개발 시 안전 보장
- 협업 시 충돌 최소화
- 코드 관리 유연성
# 브랜치 목록 확인
git branch # 로컬
git branch -a # 로컬 + 원격
# 브랜치 생성
git branch <branch-name> # 새 브랜치 생성
git checkout -b <branch-name> # 브랜치 생성 + 바로 이동
git switch -c <branch-name> # 브랜치 생성 + 바로 이동
# 브랜치 이름 변경
git branch -m <new-branch-name>
git branch -m <old-name> <new-name>
# 브랜치 삭제
git branch -d <branch-name>

Merge
Merge는 서로 다른 브랜치의 변경 사항을 병합하는 과정이다.
3-Way Merge
3-way Merge는 가장 일반적인 유형으로, 두 브랜치가 공통 조상(commit base)을 가진 상황에서 각각 독립적인 변경이 발생한 상황이다.
Git은 공통 조상, 현재 브랜치 최신 커밋, 그리고 병합 대상 브랜치의 최신 커밋 총 3개를 비교하여 새로운 병합 커밋을 생성한다.
# 초기화 및 기본 설정
git init merge-demo
cd merge-demo
echo "hello" > file.txt
git add .
git commit -m "Initial commit"
# 새로운 브랜치 생성 및 수정
git checkout -b feature
echo "feature work" >> file.txt
git commit -am "Update in feature branch"
# 메인(main) 브랜치에서도 별도 수정
git checkout main
echo "main work" >> file.txt
git commit -am "Update in main branch"
# 이제 main ← feature 병합
git merge feature
# => 공통 조상 + main + feature 비교 → 3-way merge 발생

2-Way Merge
2-Way Merge는 병합하려는 두 버전 사이에 공통 조상(merge base)이 없는 경우 발생한다. 주로, 전혀 다른 Git 저장소를 합칠 때 또는 히스토리가 완전히 단절된 브랜치끼리 병합하는 경우 발생한다.
Git은 단순히 두 버전만 비교하고 병합해야 하기 때문에 충돌 가능성이 높다.
# 새 디렉토리 생성 및 독립 프로젝트 1 초기화
mkdir repo1 && cd repo1
git init
echo "project A" > a.txt
git add .
git commit -m "Initial commit in repo1"
# repo2도 별도로 초기화
cd ..
mkdir repo2 && cd repo2
git init
echo "project B" > b.txt
git add .
git commit -m "Initial commit in repo2"
# repo2에 repo1을 remote로 추가 후 병합 시도
git remote add repo1 ../repo1
git fetch repo1
# 공통 히스토리가 없음 → 2-way merge 상황 발생
git merge repo1/main
# > refusing to merge unrelated histories 메시지 출력
2-way merge의 경우, '--allow-unrelated-histories' 옵션을 붙여야 merge가 진행된다.
git merge repo1/main --allow-unrelated-histories

Fork
원격 저장소 서비스(GitHub, GitLab 등)에서 제공하는 기능으로, 다른 사람의 저장소를 내 계정으로 복제해 독립적인 복사본을 만드는 과정이다.
특징
- 원본 저장소 (original repo)와 연결은 유지되지만, 본인의 fort는 독립적으로 관리 가능하다.
- 원본에 기여하고 싶다면 내 fork에서 작업한 뒤, Pull Request(PR)을 생성하여 원본 저장소에 제안하는 방식으로 동작한다.
Fork vs. Clone 차이
- Clone : 원격 저장소 하나를 로컬에 복제하는 Git 명령어 (Git clone URL)
- Fork : 원격 저장소를 내 계정에 복사하는 GitHub/GitLab 자체 기능.
GitHub
GitHub는 Git 저장소를 호스팅하는 클라우드 기반 플랫폼이다.
특징
- 버전 관리 및 협업 지원
- 이슈 관리, Pull Request, 코드 리뷰, Actions (CI/CD) 등 확장 기능 제공

Pull Requests(PR)
한 저장소의 브랜치에서 다른 브랜치 (보통 main)에 변경사항을 반영해 달라고 요청하는 기능이다.
주요 목적
- 코드 리뷰 진행, 변경 사항 공유 및 토론
- CI/CD 테스트 트리거
PR 실습 방법
# 1. GitHub에서 연습용 공개 저장소(Fork 가능) 하나 선택
# 예: https://github.com/someone/example-repo
# GitHub UI에서 [Fork] 버튼 클릭
# 2. 내 계정에 fork된 저장소를 clone
git clone https://github.com/my-username/example-repo.git
cd example-repo
# 3. 새 브랜치 생성
git checkout -b feature/update-readme
# 4. 파일 수정 (예: README.md에 한 줄 추가)
echo "This is a Pull Request practice." >> README.md
# 5. 변경 사항 커밋
git add README.md
git commit -m "docs: update README for PR practice"
# 6. 내 fork 저장소(origin)에 브랜치 push
git push origin feature/update-readme
# 7. GitHub 웹사이트로 이동
# → 'Compare & pull request' 버튼 클릭
# → 변경 내용 확인 후 PR 생성
결과
- GitHub에서 PR 생성 화면을 확인할 수 있고, 원본 저장소 관리자가 리뷰 및 merge를 진행할 수 있다.
- 팀 협업이라면 코드 리뷰와 CI/CD 파이프라인 실행도 자동으로 연동된다.

참고 자료
- 3.2 Git Branching - Basic Branching and Merging
- GIT Branch and its Operations -- Digital Varys
- Git - Merge -- geeksforgeeks
- What is a Git fork? Meaning, definition and a Git Fork example -- TheServerSide
- What are GitHub pull requests -- Axolo
'Backend' 카테고리의 다른 글
| [Backend] Singleton 패턴 (1) | 2025.09.03 |
|---|---|
| [Backend] Bulider 패턴 (1) | 2025.09.03 |
| [Backend] Factory 패턴 (1) | 2025.09.03 |
| [Backend] 객체지향 디자인 패턴 (1) | 2025.09.03 |
| [Backend] Kotlin 소개 (w. JVM) (1) | 2025.09.02 |