-
히스토리를 디자인하다 - Rebase InteractiveGIT 2025. 11. 10. 17:39
깃으로 협업을 해본사람이라면 수많은 commit과 merge로 뒤엉켜있는 경험을 해본적이 있을것이다.
물론 잘 관리해서 기능에 문제없이 만들면 그만이지만, 나중에 이 히스토리들을 읽는건 또 다른 문제가 된다.
merge랑 Rebase의 차이
쨌든 merge와 Rebase는 브랜치를 합치는건 같은데
아래와 같은 차이점이 있다.
merge : 히스토리를 있는 그대로 보존
Rebase : linear(선형)으로 히스토리를 다시쓰며 동일커밋이라도 새 커밋이 생성됨
그런데 단순히 rebase 쓰는 것을 넘어
히스토리를 수정/삭제/합치기까지 할수있는 기능이 필요하다면?
그럴때 바로 Rebase Interactive 를 쓰면된다는 말씀!
아래와 같은 상황이 있다
git init rebase-test cd rebase-test echo "1" > a.txt git add . git commit -m "first" echo "2" >> a.txt git add . git commit -m "second" echo "3" >> a.txt git add . git commit -m "third" git log --oneline이렇게 작성하면
a3c1234 third b2b2345 second a1a1111 first커밋 3개가 생성이 된다.
그런데 third와 second를 만약에 Squash 하고싶다면?
1. rebase -i 실행
git rebase -i HEAD~3HEAD~3 : 현재 HEAD에서 최근 3개의 커밋을 대상으로 rebase를 실행한다는 뜻
2. 그럼 에디터가 열리면서 아래와 같이 뜬다
pick a1a1111 first pick b2b2345 second pick a3c1234 third여기서 pick부분을 내가 편집하고싶은 것으로 바꿔주면 된다.
아래는 쓸수있는 명령어를 정리해보았다!
pick 그대로 둠 reword 메시지 수정 edit 커밋 내용 수정 squash 이전 커밋과 합치기 fixup 이전 커밋과 합치되 메시지 버림 drop 커밋 삭제 만약 2,3 번째 커밋을 합치고 싶다면?
pick a1a1111 first pick b2b2345 second squash a3c1234 third3번째 커밋에게 squash 또는 s를 적어주면 끝!
불필요한 커밋 수정이나 오타수정에 좋다
사람이 실수할수도 있지... rebase로 잘못했을 때 복구하고 싶다면?
git reflog //이전 상태의 해시를 찾는다. git reset --hard [원하는 커밋 해시] //이러면 복구완.실수해도 괜찮다. reflog를 사용하면 된다!
협업에서 rebase를 쓰는것은 위험하다!
Rebase는 커밋 히스토리를 다시 쓰기 때문에,
다른 사람이 이미 pull한 브랜치에서 rebase를 하면 충돌이 생길 수 있다.따라서 개인작업이나 개인브랜치 안에서만 쓰는것을 권장~!
git이란 나무가 있다고 생각해보면서 정리해보면

참 쉽죠? (....아니요) - branch는 가지이다.
- merge는 가지를 합치고,
- rebase는 가지의 출발점을 바꾼다.
- rebase -i는 과거 커밋 히스토리를 직접 다듬을 수 있는 강력한 도구다.
'GIT' 카테고리의 다른 글
결국 커뮤니케이션 - MARK DOWN & PR 실습 (0) 2025.11.11 제대로 알아보는 Git Reset, Revert, Restore 차이 (0) 2025.11.06