홈 › Git › 05 / 8

히스토리 정리

섹션 7진행 0 / 8

3. 코드 예제

예제 1: rebase 로 선형 이력 만들기 — 01_rebase_history.sh 발췌

bash
git switch feature/login
git log --oneline --graph --all

git rebase main
git log --oneline --graph --all
text
--- rebase 전: main 과 feature/login 이 갈라짐 ---
* b85ecf5 feat: 로그인 검증 추가
* 37de3c1 feat: 로그인 폼 추가
| * e7a7915 feat: 알림 배너 추가
|/
* 0f58727 feat: 홈 화면 추가
* dc58a16 feat: 프로젝트 초기화

--- rebase 후: main 뒤로 붙어 한 줄이 됨, 해시도 바뀜 ---
* 58c55cb feat: 로그인 검증 추가
* 003169b feat: 로그인 폼 추가
* e7a7915 feat: 알림 배너 추가
* 0f58727 feat: 홈 화면 추가
* dc58a16 feat: 프로젝트 초기화

feature 의 커밋 두 개가 main 뒤로 옮겨 붙으며 해시가 37de3c1→003169b, b85ecf5→58c55cb 로 바뀌었습니다. 갈라진 그래프가 한 줄로 폅니다.

예제 2: rebase -i 로 커밋 4개를 2개로 squash·fixup·reword — 01_rebase_history.sh 발췌

bash
git log --oneline -4

export GIT_SEQUENCE_EDITOR="sed -i -e '/fix typo/s/^pick/fixup/' -e '/wip: 다국어/s/^pick/squash/'"
GIT_EDITOR="./set-msg.sh" git rebase -i HEAD~4
text
--- rebase -i 전 (squash 대상 4개) ---
2d7049f wip: 다국어 문자열 정리
d08c2ed feat: 검증 메시지 다국어 지원
f368be4 fix typo in 검증 메시지
068b10f feat: 검증 메시지 UI 추가

--- rebase -i 후: 4개가 2개로, 메시지도 reword ---
25ff622 feat: 검증 메시지 다국어 지원 완료
fe5a88a feat: 검증 메시지 UI 추가

"fix typo" 커밋은 fixup 으로 바로 앞 커밋에 조용히 합쳐지고, "wip" 커밋은 squash 로 합쳐지면서 메시지가 GIT_EDITOR 스크립트가 써 준 새 메시지로 바뀌었습니다. set-msg.sh 는 $1 로 받은 커밋 메시지 파일을 원하는 문구로 통째로 덮어씁니다.

예제 3: cherry-pick 으로 hotfix 커밋 하나를 release 브랜치에 옮기기 — 01_rebase_history.sh 발췌

bash
git switch -c release/1.0 main~1
git switch -c hotfix/home-null main
# home() 에 null 체크를 추가하고 커밋
git switch release/1.0
git cherry-pick -x <hotfix 커밋 해시>
text
--- release/1.0 은 main 의 banner 이전(C2) 지점에서 분기 ---
0f58727 feat: 홈 화면 추가

--- cherry-pick 후 release/1.0 로그: hotfix 커밋만 옮겨짐 ---
30bdb68 fix: 홈 화면 null 체크 추가
0f58727 feat: 홈 화면 추가
    (cherry picked from commit 3d0c052c4ecff5d376dc8b5e1c8fe4432c47e1f4)

release/1.0 은 banner 기능이 들어가기 전 지점에서 갈라져 hotfix 만 필요합니다. -x 로 커밋 메시지 끝에 원본 해시가 남아 나중에 어디서 왔는지 추적할 수 있습니다.

예제 4: rebase 충돌 내고 --continue 로 끝내기 — 01_rebase_history.sh 발췌

bash
git switch -c feature/greeting main   # home() 을 'hello, home' 으로
git switch main                       # home() 을 'home-v2' 로 (같은 줄)
git switch feature/greeting
git rebase main
text
Could not apply 2e2a53d... # feat: 홈 화면 인사말 추가

--- 충돌 표시 확인 ---
<<<<<<< HEAD
=======
>>>>>>> 2e2a53d (feat: 홈 화면 인사말 추가)

--- --continue 후: 한 커밋으로 정리, 해시도 새로 부여 ---
cad051f feat: 홈 화면 인사말 추가
bf3dbbf feat: 홈 화면 문구 변경
4a3b6cb fix: 알림 배너 padding 조정

두 브랜치가 home() 의 같은 줄을 각각 다르게 고쳐 충돌이 났습니다. 마커 사이 내용을 'hello, home-v2' 로 합친 뒤 git add·git rebase --continue 로 마쳤고, 커밋 해시도 cad051f 로 새로 부여됐습니다.