개발 공부/기타 공부

Git & Github 공부 - Branch, Branch 합치기

baby-t 2025. 9. 15. 14:30

https://www.youtube.com/watch?v=1I3hMwQU6GU&t=121s

얄팍한 코딩사전님의 강의를 보고 작성했습니다.

 

Git의 가장 강력한 기능 중 하나는 바로 **브랜치(Branch)**입니다. 브랜치를 사용하면 기존 프로젝트 코드에 영향을 주지 않고, 독립적인 작업 공간을 만들어 새로운 기능을 개발하거나 버그를 수정할 수 있습니다. 🌿

이는 다음과 같은 상황에서 필수적입니다.

  • 여러 작업의 독립적인 진행: A 기능과 B 기능을 동시에 개발할 때, 각자의 브랜치에서 작업하여 서로의 코드에 영향을 주지 않을 수 있습니다.
  • 안정적인 버전 관리: 실제 배포 버전은 main 브랜치에 두고, 새로운 기능은 develop 브랜치에서 개발하여 안정성이 검증되었을 때만 합치는 방식으로 안정적인 프로젝트 운영이 가능합니다.

## 1. 브랜치 기본 명령어

기능 명령어 설명
생성 git branch {브랜치명} 새로운 브랜치를 생성합니다.
목록 확인 git branch 모든 로컬 브랜치의 목록을 보여줍니다.
이동 git switch {브랜치명} 지정한 브랜치로 작업 공간을 전환합니다.
생성+이동 git switch -c {브랜치명} 브랜치를 새로 생성하고 즉시 그 브랜치로 이동합니다.
이름 변경 git branch -m {변경할이름} 현재 브랜치의 이름을 변경합니다.
삭제 git branch -d {브랜치명} 병합이 완료된 브랜치를 삭제합니다. (-D는 강제 삭제)

## 2. 브랜치 이력 확인하기

git log는 현재 브랜치의 커밋 이력만 보여줍니다. 프로젝트 전체의 브랜치 흐름을 보려면 다음 명령어를 사용할 수 있습니다.

Bash
 
git log --all --decorate --oneline --graph

하지만 이 명령어는 터미널에서 보기에 다소 복잡할 수 있습니다. Sourcetree와 같은 GUI 툴을 사용하면 브랜치가 생성되고 병합되는 전체 과정을 시각적으로 훨씬 쉽게 파악할 수 있습니다.


## 3. 브랜치 합치기: merge vs. rebase 🔀

독립적으로 작업한 브랜치의 내용을 다른 브랜치로 합치는 방법은 크게 merge와 rebase 두 가지가 있습니다. 두 방식의 가장 결정적인 차이는 **"브랜치의 작업 이력을 어떻게 남길 것인가?"**에 있습니다.

[Image comparing Git merge vs. rebase]

### Merge: "두 갈래의 역사를 하나로 합칩니다"

  • 핵심 동작: 두 브랜치의 변경 이력을 그대로 유지하면서, 두 브랜치를 부모로 하는 새로운 **'병합 커밋(Merge Commit)'**을 만들어냅니다.
  • 결과: 커밋 히스토리에 어떤 브랜치에서 작업했고, 언제 합쳐졌는지가 명확하게 남습니다. 히스토리가 있는 그대로 보존됩니다.
  • 사용법: 합쳐질 브랜치(예: main)로 이동한 뒤, 합칠 브랜치(예: feature)를 병합합니다.
  • Bash
     
    git switch main
    git merge feature
    

### Rebase: "역사를 깔끔하게 재정렬합니다"

  • 핵심 동작: 한 브랜치의 변경 이력(커밋)들을 다른 브랜치의 최신 커밋 뒤로 '옮겨서 이어 붙이는' 방식입니다.
  • 결과: 마치 처음부터 main 브랜치에서 순차적으로 작업한 것처럼, 커밋 히스토리가 하나의 깨끗한 직선 형태로 만들어집니다. 기존 브랜치의 분기점과 같은 흔적은 사라집니다.
  • 사용법: 옮기고 싶은 브랜치(예: feature)로 이동한 뒤, 기반이 될 브랜치(예: main)를 지정합니다.
  • Bash
     
    git switch feature
    git rebase main
    

## 4. 충돌 해결하기 (Resolving Conflicts)

두 브랜치에서 같은 파일의 같은 부분을 다르게 수정했을 경우, Git은 어떤 것을 선택해야 할지 몰라 **충돌(Conflict)**을 발생시키고 작업을 멈춥니다.

### merge에서의 충돌 해결

  1. 충돌이 발생한 파일을 열면 <<<<<<<, =======, >>>>>>>와 같은 마커로 충돌 부분이 표시됩니다.
  2. 해당 부분을 직접 코드를 수정하여 원하는 최종 형태로 만듭니다.
  3. 수정이 완료되면, 파일을 저장하고 git add .와 git commit을 실행하여 병합을 완료합니다.
  4. 만약 병합을 취소하고 싶다면 git merge --abort를 실행합니다.

### rebase에서의 충돌 해결

rebase는 커밋을 하나씩 옮겨 붙이는 과정이므로, 충돌이 여러 번 발생할 수 있습니다.

  1. 첫 번째 충돌이 발생하면, 위와 동일하게 파일을 직접 수정합니다.
  2. 수정 후 git commit이 아닌 git add .를 먼저 실행합니다.
  3. 그다음 git rebase --continue를 실행하여 다음 커밋을 계속해서 옮깁니다.
  4. 만약 이 과정에서 또 충돌이 발생하면 1~3번 과정을 반복합니다.
  5. rebase 전체를 취소하고 싶다면 git rebase --abort를 실행합니다.