본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

Interactive rebase: commit editor

~26 min · rebase, interactive

Level 0추적 전 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Interactive rebase는 commit 편집기야

git rebase -i <base><base>와 현재 HEAD 사이의 commit을 한 줄씩 보여주는 편집기를 열어. 줄을 고쳐 Git에 지시할 수 있어. 이 commit은 유지하고, 저 commit은 버리고, 둘의 순서를 바꾸고, 하나는 합치고, message를 고치고, 어느 지점에서는 멈춰 amend하라는 식이지. 저장하고 닫으면 Git이 그 script대로 commit을 새로 replay해. 결과는 같은 내용, 또는 네가 편집한 내용에 도달하는 다른 모양의 이력이야.

각 줄 앞의 동사가 명령이야. pick은 변경을 그대로 재생하고, reword는 변경은 유지한 채 message를 다시 써. edit는 그 commit에서 멈춰 git commit --amend하게 하고, 끝나면 git rebase --continue로 이어가. squash는 앞 commit에 합치며 message도 결합하고, fixup은 합치되 이 commit의 message는 버려. drop은 commit을 없애. 줄을 옮기면 commit 순서가 바뀌고 줄을 지우는 것도 drop과 같아.

가장 흔한 쓰임은 git rebase -i main으로 merge 전 feature branch를 정리하는 거야. WIP 보정을 원래 commit에 합치고, 버린 실험을 drop하고, 흐린 message를 reword해. commit 열 개를 논리 단위 세 개로 다시 구성할 수도 있어. 특정 옛 commit을 고치려면 git rebase -i <hash>~1에서 대상을 edit으로 바꾸고 수정한 뒤 git rebase --continue해.

안전과 관련해 둘을 기억해. Rebase는 이력을 다시 써. 새 parent와 새 hash의 commit을 만들기 때문에 이미 push했고 남이 쓴 이력이라면 조율이 필요해. Rebase는 되돌릴 수 있어. push 전에는 git reset --hard ORIG_HEAD로 돌아갈 수 있고 push 뒤에도 reflog가 rebase 전 tip을 90일 보관해. conflict에서는 Git이 크게 멈춰주고 reflog로 회복할 수 있어.

Code

전형적 interactive rebase 스크립트·text
# git rebase -i main 이 editor 에 이런 거 보여줘:

pick    abc1234 Add OAuth2 GitHub login
fixup   def5678 fix config typo
reword  9876543 docs: add OAuth setup notes
edit    fedcba0 refactor: extract token storage
drop    1234abc experiment: log every request
pick    aabbcc1 Add logout button

# 동사:
#   pick    - 그대로
#   reword  - 변경 유지, 메시지 rewrite
#   edit    - 여기 멈추고 amend 가능
#   squash  - 이전 commit 에 fold, 메시지 결합
#   fixup   - 이전에 fold, 이 메시지 폐기
#   drop    - 이 commit 삭제
Interactive rebase 중간 흐름·bash
git rebase -i main
# 스크립트 편집, 저장, 종료.
# Git 이 replay 시작. "edit" 마킹한 게 있으면:

# Git 이 edit commit 에서 멈춤. 변경:
git add src/auth.js
git commit --amend
git rebase --continue

# Pick / squash 에 conflict 나면:
# (파일 해결 후)
git add resolved-file
git rebase --continue

# 통째로 빠지기, pre-rebase 상태 복원:
git rebase --abort

External links

Exercise

commit이 다섯 개 이상인 연습용 branch에서 git rebase -i HEAD~5를 실행해. script에서 한 commit은 reword, 작은 commit 하나는 앞 commit에 합치는 fixup, 중간에 amend할 commit은 edit으로 바꿔. edit 단계는 git rebase --continue로 통과하고 git log에서 결과가 지시한 모양인지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.