# Git 3.0부터 기본 브랜치가 “master”가 아닌 “main”으로 바뀐 이유와 적용 방법

---

# # 서론 – “master”와 “main”, 왜 바뀌었을까?

Git을 처음 배우는 개발자라면 **“master”** 라는 기본 브랜치를 익숙하게 사용했을 겁니다. 그런데 Git 3.0부터는 새 저장소를 만들 때 기본 브랜치 이름이 **“main”** 으로 자동 설정됩니다.

이 변화가 왜 일어났는지, 기존 프로젝트에 어떤 영향을 미치는지, 그리고 바로 적용할 수 있는 방법은 무엇인지 궁금하지 않으신가요?

본 글에서는 **Git 기본 브랜치**가 바뀐 배경, **main 브랜치**와 **master**의 차이, 그리고 실제 프로젝트에 적용하는 구체적인 절차를 초보자도 이해하기 쉬운 흐름으로 정리합니다.

---

# # 본론

## # 1️⃣ Git 기본 브랜치 명명 규칙 변경 배경

| 구분 | 기존 | 현재 (Git 3.0) |

|------|------|---------------|

| 기본 브랜치 이름 | master | main |

| 변경 시점 | 2022년 8월 (Git 2.28부터 옵션 제공) | 2024년 3월, Git 3.0 정식 적용 |

1. **포용성(Inclusivity) 강화**

   - “master”라는 용어가 과거 노예제와 연관된 단어라는 인식이 확산되면서, 오픈소스 커뮤니티와 주요 기업들이 보다 중립적인 용어 사용을 권장했습니다.

   - Git 프로젝트 역시 이 흐름에 동참해 기본값을 “main”으로 바꾸기로 결정했습니다.

2. **기술적 준비**

   - Git 2.28부터 `init.defaultBranch` 설정 옵션이 도입돼, 사용자가 원하는 기본 브랜치명을 자유롭게 지정할 수 있었습니다.

   - Git 3.0에서는 이 옵션을 기본값 “main”으로 설정해 배포했습니다.

> **SEO 키워드**: *Git 기본 브랜치*

---

## # 2️⃣ “main”과 “master”는 실제로 다를까?

- **기능적으로는 동일**

  - Git 내부에서는 브랜치 이름이 단순히 레퍼런스(참조)일 뿐이며, “main”이든 “master”든 커밋 히스토리, 병합 방식 등에 차이가 없습니다.

- **프로젝트 설정에 미치는 영향**

  - CI/CD 파이프라인, 배포 스크립트, 문서화된 워크플로우에서 브랜치 이름을 하드코딩한 경우, 이름이 바뀌면 오류가 발생할 수 있습니다.

  - 예를 들어, GitHub Actions 워크플로우 파일에 `on: push: branches: [ master ]` 와 같이 명시돼 있으면, 새 브랜치가 “main”일 경우 트리거되지 않습니다.

- **협업 문화와 가독성**

  - “main”이라는 이름은 프로젝트의 **주된(메인) 개발 라인**이라는 직관적인 의미를 전달해, 팀원 간 커뮤니케이션이 더 명확해집니다.

> **SEO 키워드**: *main 브랜치*

---

## # 3️⃣ 기존 레포지토리를 “main”으로 전환하는 단계별 가이드

아래 절차는 **초보자도 따라 할 수 있는** 가장 간단한 방법을 제시합니다.

### # 3‑1. 로컬 브랜치 이름 변경

```
bash

# 현재 master 브랜치가 체크아웃된 상태에서

git branch -m master main

```

### # 3‑2. 원격 저장소에 새로운 브랜치 푸시

```
bash

git push -u origin main

```

### # 3‑3. 원격 기본 브랜치 설정 변경 (GitHub, GitLab 등)

- GitHub:

  1. 레포지토리 페이지 → Settings → Branches → Default branch → **main** 선택

  2. 기존 master 브랜치를 삭제 (필요 시)

- GitLab:

  1. Settings → Repository → Default branch → **main** 선택

### # 3‑4. 로컬에 남아 있는 master 브랜치 삭제

```
bash

git push origin --delete master   # 원격 삭제

git branch -d master              # 로컬 삭제

```

### # 3‑5. CI/CD, 배포 스크립트 업데이트

- `.github/workflows/*.yml`, `Jenkinsfile`, `Dockerfile` 등에서 `master` 라는 문자열을 `main` 으로 교체합니다.

- 검색·바꾸기(Find & Replace) 도구를 활용하면 실수 없이 일괄 수정이 가능합니다.

> **TIP**: 변경 후 `git fetch --prune` 명령으로 오래된 레퍼런스를 정리하면 깔끔합니다.

---

## # 4️⃣ 새 프로젝트에서 “main”을 기본으로 시작하기

Git 3.0을 설치한 이후라면, 별다른 설정 없이 `git init` 명령만으로 자동으로 “main” 브랜치가 생성됩니다.

만약 이전 버전 Git을 사용 중이라면, 전역 설정을 추가해 동일한 효과를 얻을 수 있습니다.

```
bash

git config --global init.defaultBranch main

```

위 명령을 실행하면, **전역적으로** 모든 새 레포지토리에서 기본 브랜치가 “main”이 됩니다.

---

## # 5️⃣ “main” 전환 시 흔히 겪는 오류와 해결책

| 오류 상황 | 원인 | 해결 방법 |

|-----------|------|-----------|

| `fatal: ambiguous argument 'master': unknown revision or path not in the working tree.` | 로컬에 아직 master 브랜치가 남아 있지 않음 | `git checkout -b main origin/main` 으로 새 브랜치 생성 |

| CI 파이프라인이 트리거되지 않음 | 워크플로우 파일에 `master` 고정 | 워크플로우 파일을 `main` 으로 수정 후 커밋 |

| Pull Request가 자동 병합되지 않음 | 기본 브랜치가 변경돼 PR 대상이 달라짐 | PR 대상 브랜치를 `main` 으로 변경하거나, 기본 브랜치를 재설정 |

---

# # 결론 – 지금 바로 “main” 브랜치를 적용해 보세요!

Git 3.0에서 **“main”** 으로 기본 브랜치를 바꾸는 것은 단순히 이름을 바꾸는 것이 아니라, 보다 포용적이고 직관적인 개발 문화로 나아가는 첫걸음입니다.

1️⃣ **새 프로젝트**라면 `git init`만으로 바로 “main”을 사용해 보세요.

2️⃣ **기존 레포지토리**는 위에서 소개한 5단계 가이드를 따라 순차적으로 전환하면, 별다른 충돌 없이 최신 흐름에 맞출 수 있습니다.

> **행동 유도**: 지금 바로 로컬 터미널을 열고 `git config --global init.defaultBranch main` 명령을 실행해 보세요. 그리고 팀원들에게도 공유해 모두가 같은 브랜치 정책을 따를 수 있도록 해주세요!

---

*이 글은 “Git 기본 브랜치”, “main 브랜치”, “master와 main 차이”라는 SEO 키워드를 포함하여 검색 엔진 최적화를 고려해 작성되었습니다.*
