ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL-2024.07.04 - TIPS - 다중 commit 하나로 합치기
    > 기초/도와줘요! 2024. 7. 4. 15:28

     

     

     

     

     

     

    도와줄 내용:

    - 다른 Branch(test) 에서 Commit 한 내용을 하나의 Commit 으로 합쳐서 Main Branch (이하 origin main ) 로 PR 날리는 방법

     


    작업 방향:

    1. 작업한 내용 커밋

     

    - 다른 Branch (test)에서 작업한 내용을 commit 1,2,3 로 commit 함. 

    - 여기서, commit-1 , commit-2 , commit-3 을 하나의 commit 으로 묶을 예정

     


    2. 다른 브랜치에서 리베이스 작업 수행 

    // test 브랜치를 main 브랜치로 리베이스
    
    git checkout test
    git rebase -i  main

     

     

    - 여기서 -i 플래그는 인터랙티브 모드로 rebase를 실행하여, 텍스트 편집기가 열리면서 rebase에 포함될 커밋 목록이 나타남.

     


    3. 커밋 합치기

    - 해당 단계는 커밋을 합치거나 수정하는 단계

    - git rebase -i main 을 입력하고, 엔터를 클릭하면 아래와 같은 텍스트 편집기가 열림

    Before

     

    - 이렇게 열린 텍스트 편집기에서 i 를 눌러 insert mode 에 진입하고 commit-2 와 commit-3 의 pick 을  s 혹은 squash 로 변경

    - 이때, 첫번째 commit 인 commit-1 은 건들이면 안되는데, 그 이유는 첫 번째 커밋이 기준 커밋(base commit) 역할을 하기 때문

    - 나머지 커밋들은 이 첫 번째 커밋에 합쳐지는 형태로 동작하여 첫 번째 커밋의 커밋 메시지가 합쳐진 커밋의 기본 메시지가 됨

     

     

    After

     

    - esc 버튼을 눌러 insert mode 을 탈출하고, :wq 를 입력하고 enter 키를 눌러서 저장 후, 완료

    - 텍스트 편집기 1 이 완료되면 텍스트 편집기 2가 노출 

     


    4. 커밋 메시지 합치기

    - 해당 단계는 작성된 커밋 메시지를 하나로 합치는 작업

    Before

     

    - 여기서도, i 를 눌러 insert mode 에 진입하고 아래의 사진과 같이 변경 (# 을 앞에 입력하여 주석 처리하거나, 지우기)

    - 그 이후, 하나로 합쳐지는  커밋의 메시지를 설정하면 됨

     

    After

     

    - # 를 통해 주석 처리하고 새로운 commit 메시지를 new commit final 로 설정하고 esc 누른 후, :wq 로 작업 내용 저장

     


    5. develop 브랜치로 변경 사항 적용

     

     

    - 위의 단계를 거치면, commit log 가 변경된 것을 확인할 수 있음.

    - 그 이후, git rebase test 를 하여 브랜치가 특정 기준 브랜치의 최신 변경사항 위에 재배치 

     

    test 브랜치의 변경 사항을 main 브랜치에 rebase

     

     

    - 그 이후 git push origin main 으로 test branch 에서 작업한 내용을 origin main 으로 push

     

     

     

    완성!

     


     

    주의사항

    1. 공유된 브랜치에서 리베이스하지 않기
    2. 리베이스 중 충돌 처리 : 리베이스 중 충돌이 발생할 경우, 충돌을 해결 한 후 작업 진행
    3. 백업 및 준비 : 혹시 모를 사태에 대비하여 git checkout -b new-test 로 작업 내용 저장

     

     

    댓글

Designed by Tistory.