반응형
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 브랜치명
반응형
'Dev > ETC' 카테고리의 다른 글
[Git] Staged 된 파일 삭제 (0) | 2021.03.20 |
---|---|
[Github] Default 브랜치명 변경 (master -> main) (4) | 2020.10.09 |
[Markdown] Markdown 문서에서 링크 목차 만드는 법 (TOC 만들기) (14) | 2020.05.02 |
[Git] 로컬에서 git 사용 (0) | 2018.05.23 |