이미 푸시된 커밋을 합치는 법

제대로 안 되니 리베이스 연습 필요


How to squash commits in git after they have been pushed?


squash 대상을 알아 내기 위해 로그 조회

$ git log --graph --oneline


* e52f9b7 관련 자료 상세 페이지 api
* 06b47c6 주석 삭제
* 752c009 수정
* 25f45cd 쿼리 수정
* 990020e 수정 중
* 24c11fd 수정중
* f480d20 수정 중
* 13ee1fc 수정중
* 0656971 수정 중
* b722187 수정 중
* ac5e93f 수정 중
* 948e714 수정 중
* a5e3717 수정 중
* beb1803 수정 중...
* 198454c 수정 중
* 690a40b 수정 중
* 19abe54 수정중
* e24c3b9 수정중
* 17dd293 수정중
* 2433b70 수정 중
* 7210b7e 수정중
* b1a4177 수정 중..
* fac32f6 수정 중
* 62262c9 ..ing
* 5850bbf ..ing
* a03551d ..ing
* 5fc37db ..ing
* ccab8a5 ..ing
CODE



로컬에서 리베이스

git rebase -i origin/master~4 master
CODE

force 커밋

git push origin +master
CODE


Squash All Commits Related to a Single Issue into a Single Commit


git rebase -i HEAD~4
CODE


에디터 창에서 rebase 대상 커밋이 순서대로 표시됨(예전 커밋이 위에 있음)

pick abcd
pick 1234
pick 34ef
pick 87ad
CODE


맨 위 커밋은 pick 으로 남기고 다른 커밋은 squash 나 fixup 으로 수정

pick abcd
squash 1234
squash 34ef
squash 87ad
CODE

모두 squash 나 fixup 으로 바꾸면 "Cannot 'squash' without a previous commit” error while rebase" 에러가 남


에디터에서 저장을 하면 squash 가 완료됨.


커밋 로그를 수정할 경우 amend 실행

git commit --amend
CODE



이미 push 되었으므로 강제 푸시(--force)

git push origin master --force
CODE

주의

강제 push 를 했으므로 다른 client 는 모두 다시 fetch 받아야 함


Git Howto: Revert a Commit Already Pushed to a Remote Repository

이미 푸시된 커밋을 되돌리는 법


See also