git commit 합치기
개발을 하다 보면 사소한 변경으로 인한 commit을 할때가 있는데 이런게 쌓이다보면 지저분한 git 히스토리가 될수 있습니다. 이럴경우 commit들을 합쳐서 정리를 할수가 있는데 rebase를 통한 commit을 합치는 방법을 알아보겠습니다.
commit 목록이 아래와 같다고 했을때 두번째~네번째 commit들을 합처 보겠습니다.
해당 프로젝트 경로에서 git bash를 실행해줍니다.
rebase 사용하기
해당 프로젝트 경로에서 git bash프로그램을 실행합니다.
3개의 커밋을 합쳐줄거기 때문에 git rebase -i HEAD~3을 실행해줍니다. 2개의 커밋을 수정하고 싶을때는 2를 붙여 주면됩니다. 위의 경우에는 커밋이 4개 밖에 없기때문에 3까지 밖에 적용이 안됩니다.
git rebase -i HEAD~3
합칠 commit을 선택
git rebase -i HEAD~3을 입력하면 아래와 같은 화면이 뜹니다. i를 눌러 편집모드에 들어가 맨위의 commit을 제외한 나머지들의 pick을 s로 바꿔줍니다. 네번째 commit에 해당하는곳만 빼고 나머지를 s로 바꿔줘야 할것 같지만 맨 위의 커밋을 제외한 나머지를 s로 바꿔줘야 가장 최근 commit에 해당하는 코드가 남습니다.
pick을 s로 바꿔준 모습입니다. 변경 했다면 편집모드에서 나와 :wq를 입력해 저장하고 나와줍니다.
커밋 메세지 수정하기
저장하고 나왔다면 아래와 같은 화면이 뜨는데 합친후 적용할 커밋메세지를 입력해줍니다.
위같은 메세지가 뜨는데 커밋 메세지를 입력해줍니다.
커밋 합치기 완료 라는 메세지를 입력하였습니다.
:wq 를 눌러 저장하고 나와줍니다.
git 히스토리를 확인해보면 commit이 잘 합쳐진것을 확인 할수 있습니다.
깃허브에 강제푸시를 진행해야 깃 히스토리가 위에 처럼 나타납니다.
강제푸시 전에는 rebase를 했기때문에 위와 같이 브랜치가 2개 인것 처럼 표시됩니다.
저장소로 강제 push 하기
git repository로 푸시할때는 강제 푸시를 해주면 됩니다.
git push -f origin master
rebase를 잘못하였을때 rebase 취소 하기
git reflog 브랜치이름 을 입력하여 로컬에서 작업했던 git 작업 내역을 확인 할수 있습니다.
해당 로그를 보고 돌아가고 싶은 커밋 아이디를 입력하면 해당 시점으로 돌아 갈수 있습니다.
git reflog master
HEAD@{14}로 돌아가고 싶으면 아래와 같이 입력해 줍니다.
git reset --hard HEAD@{14}