gyue 님의 블로그

[Learn Git Branching] 종합 선물세트 본문

블로그 & 기술문서

[Learn Git Branching] 종합 선물세트

gyue 2026. 4. 4. 16:12

개요

이번 단계에서는 지금까지 학습한 Git 개념들을 종합적으로 활용하는 연습을 진행했다.

이전 단계에서는 cherry-pick, rebase 등을 통해 커밋을 이동시키거나 재구성하는 방법을 각각 따로 배웠다면,
이번 단계에서는 이 기능들을 함께 사용하여 “복잡한 작업 흐름을 원하는 형태로 만드는 것”에 집중했다.

특히 단순히 명령어를 사용하는 것이 아니라 어떤 상황에서 어떤 명령어를 선택해야 하는지 판단하는 과정이 중요했다.


딱 한 개의 커밋만 가져오기

개념

개발을 하다 보면 특정 브랜치에서 작업한 여러 커밋 중
일부 커밋만 다른 브랜치에 적용하고 싶은 상황이 자주 발생한다.

이때 전체 merge를 하면 불필요한 커밋까지 같이 들어오기 때문에 문제가 발생할 수 있다.


해결 방법

대표적인 방법은 두 가지이다.

1) cherry-pick

git cherry-pick <commit>
 
  • 특정 커밋만 선택해서 가져오기
  • 가장 직관적인 방법

2) rebase -i

git rebase -i
 
  • 필요한 커밋만 선택 가능
  • 순서 변경 및 정리 가능

포인트

  • merge는 전체를 가져온다.
  • cherry-pick / rebase는 선택적으로 가져온다.

실무에서는 “선택적 적용”이 훨씬 중요하다


커밋 수정하기 (commit 수정 흐름)

상황

이미 커밋을 했는데 내용을 수정해야 하는 경우


해결 방법

1. rebase로 위치 이동

git rebase -i HEAD~n
 

2. commit 수정

git commit --amend
 

3. 다시 정렬

git rebase -i
 

핵심 개념

  • 커밋은 “고정된 데이터”가 아니다
  • 필요하면 수정 가능하다


cherry-pick 활용 심화

이번 단계에서는 cherry-pick을 단순 사용이 아니라
여러 커밋을 조합해서 사용하는 방식까지 다뤘다.

git cherry-pick C2
 

특징

  • HEAD 기준으로 커밋이 복사됨
  • 여러 브랜치에서 원하는 작업만 가져올 수 있음

포인트

  • cherry-pick은 히스토리를 “복사”한다
  • 원본 구조는 유지된다.

  즉, 안전하게 필요한 기능만 가져오는 방식


태그(Tag)

개념

태그는 특정 커밋을 가리키는 “고정된 포인터”이다.

git tag v1 C1
 

특징

  • 브랜치와 달리 움직이지 않음
  • 특정 시점을 표시하는 용도
  • 보통 버전 관리 (v1.0, v2.0)에 사용

핵심 차이

구분브랜치태그
이동 가능 불가능
용도 작업 흐름 특정 시점 표시


git describe

개념

현재 커밋이 가장 가까운 태그 기준으로 어디 위치인지 보여주는 명령어

git describe
 

출력 형태

<tag>-<numCommits>-<hash>
 

예:

v1-2-gC2
 

의미:

  • v1 태그 기준
  • 2개의 커밋 뒤
  • 현재 커밋 해시 C2

활용

  • 현재 버전 위치 파악
  • 배포 상태 확인
  • 디버깅 시 유용


이번 단계에서 느낀 점

이번 단계는 지금까지 배운 Git 기능들을
단순히 “아는 것”에서 “조합해서 사용하는 단계”로 넘어가는 과정이었다.

 

특히 다음과 같은 점이 인상적이었다.

  • Git은 단일 명령어보다 조합이 중요하다.
  • cherry-pick과 rebase는 상황에 따라 선택해야 한다.
  • 태그는 단순하지만 매우 중요한 기준점이다.
  • Git은 작업 흐름을 설계하는 도구이다.

처음에는 어떤 명령어를 써야 할지 헷갈렸지만, “무엇을 하고 싶은지”를 먼저 생각하니
적절한 명령어가 자연스럽게 선택되기 시작했다.


정리

이번 단계에서 학습한 핵심은 다음과 같다.

  • cherry-pick은 특정 커밋만 선택해서 가져온다.
  • rebase는 커밋 흐름을 재구성한다.
  • commit은 수정 및 재정렬이 가능하다.
  • tag는 특정 시점을 고정하는 역할을 한다.
  • git describe는 현재 위치를 설명해준다.

결국 Git은 단순한 명령어 집합이 아니라
작업 흐름을 자유롭게 설계하는 시스템”이라는 것을 이해하게 되었다.