GIT 브랜치 실습 2

2026. 1. 6. 15:55Git/Git 브랜치

🖼️ 브랜치 연습 구조(브랜치-워크플로)

 

브랜치별 커밋 흐름 (C는 커밋, master → main으로 )

main → C0 → C1 → C3 → C9 → C10

iss91 → C2 → C4 → C5 → C6

iss91v2 → C7 → C8 → C11

dumbidea → C12 → C13

🧩 목표 그래프

  • main: C0 → C1 → C3 → C9 → C10 → C12 → C13 → C14
  • iss91v2: (C1에서 갈라진 iss91의 C4 지점에서 분기) C4 → C7 → C8 → C11
    C11“main를 iss91v2에 머지한 커밋” (부모: C8, C14)
  • dumbidea: C13을 가리키는 브랜치 (main가 C14로 한 칸 더 진행)

💡 C11과 C14는 각각 병합(merge)으로 만들어진 커밋이다.

  • C14는 main 브랜치의 최신 커밋이며, 이전 단계에서 C13 이후 변경사항을 병합한 결과.
  • C11은 iss91v2에서 main의 최신 상태(C14)를 끌어와 머지한 병합 커밋이다.

즉, 두 브랜치(main ↔ iss91v2)가 서로의 변경사항을 공유하게 된 시점이 바로 C11이다.


💡 참고 및 연습 안내

이전 단계에서 실습했던 브랜치 생성, 전환, 병합, 삭제 명령어들을 사용하여 연습하기!!

필요할 땐 git branch, git switch, git merge, git log --graph 등의 명령어를 스스로 검색(공식 문서 등)하면서 진행해보자


0) 저장소 초기화 + 첫 커밋

mkdir git-branch-practice && cd $_
git init

echo "C0" > file.txt
git add .
git commit -m "C0"
git tag C0

1) main에 C1

echo "C1" >> file.txt
git commit -am "C1"
git tag C1

⚠️ git commit -am "C1" 사용 시 주의사항

  • a 옵션은 이미 Git이 추적 중인(tracked) 파일의 변경만 자동으로 스테이징합니다.

→ 즉, 새로 만든 파일(new file)git add로 한 번이라도 추가해두지 않았다면git commit -am으로는 커밋되지 않습니다. (편리하지만 비추천 명령어)

💬 예시

  • 기존에 있던 file.txt를 수정한 경우 → git commit -am "메시지" ✅ 가능
  • 새로 만든 new.txt 파일을 바로 커밋하려는 경우 → ❌ 실패 (git add new.txt 필요)

💡 git commit -am은 빠르지만 “무엇을 커밋하는지”를 명확히 인식하기 어렵기 때문에 반드시 git add .git commit -m "메시지" 순서로 진행하는 습관을 들이자.


2) iss91 브랜치 만들고 C2, C4

iss91은 C1 시점에서 분기합니다.

git switch -c iss91 C1

echo "C2" >> file.txt
git commit -am "C2"
git tag C2

echo "C4" >> file.txt
git commit -am "C4"
git tag C4

3) main쪽을 C3, C9, C10까지 진행

git switch main

echo "C3" >> file.txt
git commit -am "C3"
git tag C3

echo "C9" >> file.txt
git commit -am "C9"
git tag C9

echo "C10" >> file.txt
git commit -am "C10"
git tag C10

4) iss91v2 브랜치 (C4에서 분기) → C7, C8

git switch -c iss91v2 C4

echo "C7" >> file.txt
git commit -am "C7"
git tag C7

echo "C8" >> file.txt
git commit -am "C8"
git tag C8

5) main를 C12, C13까지 진행하고 dumbidea 분기

dumbidea는 C13을 가리키도록 만든 뒤, main만 한 칸 더(=C14) 진행합니다.

git switch main

echo "C12" >> file.txt
git commit -am "C12"
git tag C12

echo "C13" >> file.txt
git commit -am "C13"
git tag C13

# C13을 가리키는 실험 브랜치
git branch dumbidea

6) main를 C14까지 진행

echo "C14" >> file.txt
git commit -am "C14"
git tag C14

7) main를 iss91v2에 머지하여 C11 만들기

최종 그림의 대각선 화살표(C14 → C11) 는

“main의 최신을 iss91v2로 끌어와서 머지”했다는 의미입니다.

하지만 iss91v2 브랜치에서 main의 최신(C14)을 병합하려고 할 때, file.txt 의 같은 부분을 두 브랜치가 다르게 수정해서 충돌(conflict)이 발생한다.

git switch iss91v2
git merge --no-ff master -m "C11"

⚠️ 충돌 해결 과정

1. 충돌 확인

git status

 

2. 파일 수정(file.txt)

충돌이 난 파일을 직접 열어 수정한다.

  • 방법 1: 코드 편집기(VSCode, Notepad 등)에서  file.txt를 열어 수정
  • 방벙 2: Vim 명령어로 수정
vim file.txt

i            # 인서트(insert) 모드 진입 → 내용 수정 가능

vim에서 저장하고 나올때는
[Esc]        # 명령 모드로 복귀
:wq [Enter]  # 저장(write) 후 종료(quit)

 

⚠️ 참고: 저장하지 않고 나가려면 :q! → [Enter]

 

충돌 표식(<<<<<<<, =======, >>>>>>>)을 제거하고 두 브랜치의 내용을 합쳐서 정리한다.

<<<<<<< HEAD
...
=======
...
>>>>>>> main

 

3. 정리된 최종 내용 예시

 

4. 병합 커밋 생성

git add file.txt
git commit -m "C11"
git tag C11

이제 iss91v2의 헤드는 C11(부모: C8, C14).

main는 C14, dumbidea는 C13을 가리키는 상태가 됩니다.


🔎 8) 결과 확인

git log --oneline --graph --decorate --all
  • main→ … C10 → C12 → C13 → C14
  • iss91v2 → C4 → C7 → C8 → C11 (merge, 부모 중 하나가 C14)
  • dumbidea → C13
  • (원하면 git branch -D iss91로 iss91 정리)

📸 캡처 포인트

1. git log --graph --oneline --all 전체 그래프

 

2. git show C11 (머지 커밋 부모가 C8, C14인지 확인)

3. git branch -v (각 브랜치의 위치: main=C14, iss91v2=C11, dumbidea=C13)

iss91을 삭제하고 싶다면

 git branch -d iss91

 


'Git > Git 브랜치' 카테고리의 다른 글

GIT 브랜치 실습 1  (0) 2026.01.06
GIT 브랜치 관리  (0) 2026.01.06
GIT 브랜치와 Merge의 기초  (0) 2026.01.06
GIT 브랜치란 무엇인가  (0) 2026.01.06