상세 컨텐츠

본문 제목

Git Sqaush로 여러 개의 Commit logs 합치기(Git Rebase)

Programming/git

by 노란날. 2023. 6. 14. 08:38

본문

반응형

📎  Git Sqaush로 여러 개의 Commit logs 합치기(Git Rebase)

안녕하세요, 이번 포스팅에서는 여러 커밋들을 하나로 묶는 방법에 대해 살펴보겠습니다.

보통 git을 사용하다보면 불필요하게 커밋을 해야 하는 경우가 발생할 수 있습니다.

(예를 들면.. 개발 서버에서 테스트를 위해 쿼리나 데이터 조작등의 불필요한 예시가 있겠습니다.)

 

무튼, 이러한 테스트를 진행하려면 테스트 commit - 롤백 commit으로 최소 2번 이상 불필요한 커밋을 진행하게 됩니다.

이 때, Git Squash를 통해 불필요한 커밋 로그를 하나로 묶을 수 있습니다. 또한 Squash 기능을 사용하기 위해 Git Rebase를 사용해야 하는데요, 이러한 기능을 활용하여 이력을 보다 깔끔하게 정리하는 방법에 대해 살펴보겠습니다.

 

 

Git Squash & Git Rebase

  • Git Squash는 여러 개의 커밋 이력을 하나의 커밋 이력으로 만들때 사용합니다.
  • Git Rebase는 두 개의 공통 base를 가진 브랜치에서, A 브랜치의 base를 B 브랜치의 최신 커밋으로 base를 옮기는 작업을 의미합니다.(base를 다시 설정)

 

 

불필요한 commit 예시

현재 상황은 위와 같이 총 6개의 불필요한 커밋 로그들이 존재합니다.

이러한 불필요한 커밋들을 Git Squash & Git Rebase를 활용하여 하나의 커밋으로 묶는 작업을 해보겠습니다.

 

 

1. rebase 명령어

git rebase -i HEAD~6 // 6 = 합치고자 하는 커밋의 수

위 명령어를 통해 rebase 하고자 하는 커밋 수를 입력합니다.

 

 

2. 합칠 commit log 선택

1. rebase 명령어를 입력하면 위와 같이 편집 창이 나오는데요, 위에서 합칠 commit의 가장 앞에 존재하는 pick을 s(squash)로 변경합니다.

(※ 여기서 주의할 점은, 가장 오래된 commit을 pick으로 남겨놔야 합니다. - 위의 예에선 test1인 8ffdf40 커밋) 

vim 편집기를 이용하여 위와 같이 합칠 커밋의 pick을 s로 변경한 후 저장합니다(esc + :wq)

 

 

3. commit message 수정

위에서 #은 주석이라고 생각하시면 됩니다. 

저는 test1 ~ test6의 모든 커밋 메시지를 제거하고(#) 새로운 커밋 메시지를 남겨보겠습니다.

위 작업을 진행한 후 마찬가지로 저장하고 편집창을 나갑니다. (esc + :wq)

 

 

 

4. 강제 git push

git push origin -f

마지막으로 git repository에 강제로 push를 진행하면 됩니다.

(강제 push이기 때문에 동일한 브랜치로 공동작업자가 존재하면 안됩니다!!!)

 

 

5. rebase 결과

결과를 확인해보면 정상적으로 test1 ~ test6의 commit log가 단 하나의 commit(rebase test)로 합쳐진 것을 확인할 수 있습니다.

 

지난 번, push된 commit을 취소하려고 git reset HARD~ 명령어를 수행하다가 작업 이력이 사라질 뻔 한 경험을 한 적이 있는데요, 😱 그 이후로는 rebase를 활용하여 commit을 묶어 history를 깔끔하게 관리하려고 하고 있습니다.

 

참고로 git reset을 해서 이력이 날라갔더라도, git add를 해놓았다면 git fsck라는 명령어를 통해 과거 이력의 추적이 가능하니 이를 통해 하나씩 복구가 가능하긴 합니다. 

 

 

 

 

출처 https://zzang9ha.tistory.com/417

반응형

관련글 더보기