gyue 님의 블로그
[Learn Git Branching] 고급 문제 본문
개요
이번 단계에서는 지금까지 학습한 Git 개념들을 기반으로
보다 복잡한 상황을 해결하는 고급 문제들을 다뤘다.
이전 단계까지는 cherry-pick, rebase, tag 등을 개별적으로 이해하고 사용하는 데 집중했다면,
이번 단계에서는 여러 브랜치와 커밋이 얽힌 상태에서
원하는 구조를 정확하게 만들어내는 것이 핵심 목표였다.
특히 단순히 명령어를 아는 것이 아니라
문제를 보고 해결 전략을 세우는 능력이 중요해지는 단계였다.
여러 브랜치를 동시에 Rebase 하기
개념
여러 개의 브랜치가 서로 다른 위치에 존재할 때
이 모든 작업을 하나의 흐름(main)으로 정리해야 하는 상황이 발생한다.
이때 사용하는 핵심 개념이 바로 rebase이다.
포인트
- 여러 브랜치의 커밋을 하나의 기준(main)에 정렬
- 커밋 순서를 원하는 구조로 재구성
- 히스토리를 깔끔하게 정리 가능
merge와 달리 “선형 구조”를 만들 수 있다.
단순한 rebase가 아니라
“어떤 순서로 붙일 것인가”를 생각해야 해서 난이도가 올라갔다.



다수의 부모 (Multiple Parents)
개념
Git에서 merge가 발생하면 하나의 커밋이 여러 부모를 가지게 된다.
이때 특정 부모를 선택해서 이동해야 하는 상황이 발생한다.
- ^ : 부모 선택
- ^2 : 두 번째 부모
- 병합 커밋은 여러 갈래로 이동 가능
사용 방법
- 첫 번째 부모 선택
- 두 번째 부모 선택
포인트
Git은 단순한 직선 구조가 아니라
“그래프 구조”라는 것을 체감하게 되는 부분
상대 참조 심화 (HEAD 이동 활용)
개념
이전 단계에서 배운 상대 참조를 더 복잡하게 활용하는 단계












예시
포인트
- ~ : 몇 단계 위로 이동
- ^ : 부모 선택
- 조합 가능
복잡한 커밋 트리에서도 정확하게 위치 이동 가능
특정 위치에 브랜치 생성
개념
원하는 커밋 위치에 새로운 브랜치를 생성하는 문제
방법
포인트
- 브랜치는 단순히 “포인터”
- 원하는 커밋 어디든 생성 가능
브랜치를 이동시키는 것이 아니라 “가리키는 위치를 설정”하는 개념
브랜치 스파게티 (복잡한 구조 해결)
개념
여러 브랜치가 얽혀 있는 상태에서 각 브랜치를 서로 다른 방식으로 정리해야 하는 문제
특징
- 일부 브랜치는 순서 변경
- 일부는 커밋 제거
- 일부는 특정 커밋만 유지
여러 Git 명령어를 조합해야 해결 가능
사용된 중요 명령어
- git rebase -i
- git cherry-pick
- git branch
- git checkout
포인트
- 하나의 명령어로 해결되지 않는다.
- 여러 명령어를 “전략적으로 조합”해야 한다.



고급 문제를 끝으로 [ 메인 ] Clear

이번 단계에서 느낀 점
이번 단계는 단순 학습이 아니라 “Git을 얼마나 이해했는지 테스트하는 단계”였다.
특히 다음과 같은 점이 인상적이었다.
- Git은 그래프 구조라는 것을 확실히 체감했다.
- 같은 결과라도 여러 가지 방법으로 해결할 수 있다.
- 명령어 암기보다 문제 해결 능력이 훨씬 중요하다.
- rebase와 cherry-pick의 차이를 명확히 이해하게 되었다.
처음에는 복잡해 보였지만 커밋 흐름을 하나씩 따라가면서 생각하니 점점 구조가 보이기 시작했다.
정리
이번 단계에서 학습한 핵심은 다음과 같다.
- 여러 브랜치를 rebase로 정리할 수 있다.
- merge 커밋은 여러 부모를 가진다.
- ^, ~를 활용해 커밋을 자유롭게 이동할 수 있다.
- 브랜치는 특정 커밋을 가리키는 포인터이다.
- Git 문제는 명령어 조합으로 해결한다.
결국 Git은 단순한 도구가 아니라
복잡한 작업 흐름을 설계하고 제어하는 시스템이라는 것을 이해하게 되었다.
'블로그 & 기술문서' 카테고리의 다른 글
| [Learn Git Branching] 고급 git 원격 저장소 (0) | 2026.04.04 |
|---|---|
| [Learn Git Branching] Push & Pull - git 원격 저장소 (0) | 2026.04.04 |
| [Learn Git Branching] 종합 선물세트 (0) | 2026.04.04 |
| [Learn Git Branching] 코드 이리저리 옮기기 (0) | 2026.04.04 |
| [Learn Git Branching] 다음 단계로 (0) | 2026.04.04 |