Dev/ETC

[Git] Commit History 정리

kyeoneee 2019. 7. 1. 23:12
반응형
local에서 작업을 하고 서버에서 코드를 받아서 테스트를 하다가 수정사항이 생기면 양쪽에서 커밋을 마구잡이로 할 때도 있다.
아니면 자잘하게 놓친 한 두줄을 위해 커밋을 또 날리게 되는 경우들이 있다.
그러다보면 커밋 히스토리는 지저분해지기 쉽상.
이런 경우에 rebase를 사용해 커밋 히스토리를 정리할 수 있다.

local에서 작업하는 기준으로 remote에 commit 한 history를 정리하고 싶을 때

# n : 합치고 싶은 커밋의 갯수

$ git rebase -i HEAD~n

위의 명령어를 실행하면 아래와 같이 커밋을 수정할 수 있는 화면이 나온다.

나타난 커밋들 중에 합치고 싶은 커밋의 pick을 squash로 변경한다.

이 예제의 경우 aa8f244 커밋에 5e5dc41 커밋의 내용을 반영하고, 커밋을 합치기 위해 5e5dc41 커밋을 squash로 변경 해 준다.

변경을 완료하면 esc + :x

이제 커밋메세지를 새로 쓸 수 있는 화면이 나오게 된다.

지우고 싶은 커밋메세지의 앞에 # 을 붙여 주석처리를 해준다.

첫번째 커밋 메세지의 위치에 새로 쓰고자 하는 커밋메세지를 작성해주고 :x로 종료해준다.

 

Successfully rebased and updated ~ 로그가 나오게 되면 local에서 rebase가 잘 된 것!

이제 원격에 수정사항을 적용하기 위해 git push --force origin branchName 명령어를 사용한다.

이전 커밋에 히스토리를 합친 것이기 때문에 HEAD보다 현재의 커밋이 뒤에 있기 때문에 그냥 push하면 오류가 나므로 아래와 같이 --force 옵션을 붙여서 force push를 해준다.

--force 옵션을 붙이게 되면 local의 git 정보가 remote에 덮어씌워 지므로 조심해서 써야 한다.

git push --force origin 브랜치명

 

반응형