2026. 1. 6. 15:55ㆍGit/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 |