Development/Git
[git] 히스토리 단장하기
레오나르도 다빈츠
2023. 5. 14. 15:33
Git으로 일하다 보면 어떤 이유로든 로컬 커밋 히스토리를 수정해야 할 때가 있다.
1) 커밋의 순서 변경
2) 커밋한 파일 변경
3) 여러개의 커밋을 하나로 합치기
4) 하나의 커밋을 여러개로 분리하기
5) 커밋 전체 삭제
이 모든 것은 다른 사람과 코드를 공유하기 전에 이뤄져야 한다.
◽️ 마지막 커밋을 수정하기
1) 커밋 메시지를 수정하기
자동으로 텍스트 펀집기를 실행시켜 마지막 커밋 메시지를 열어준다.
$ git commit --amend
2) 나중에 수정한 파일을 마지막 커밋안에 밀어넣기
// 1. add하여 Staging Area에 넣은 뒤
$ git add
// 2. 아래 명령어로 커밋하면 커밋 자체가 수정되며 추가로 수정사항을 밀어넣을 수 있다.
$ git commit --amend
// 만약 커밋 메시지를 수정할 필요가 없다면 아래 명령어를 실행한다.
// 편집기가 실행되지 않는다.
$ git commit --amend --no-edit
이때 SHA-1 값이 바뀌기 때문에 과거의 커밋을 변경할 때 주의해야 한다.
rebase와 같이 이미 Push한 커밋은 수정하면 안 된다.
◽️ 커밋 메시지를 여러 개 수정하기
최근 커밋이 아니라 예전 커밋을 수정하려면 다른 도구가 필요하다. 히스토리를 수정하기 위해 만들어진 도구는 없지만 rebase 명령을 이용하여 수정할 수 있다. 현재 작업하는 브랜치에서 각 커밋을 하나하나 수정하는 것이 아니라 어느 시점부터 HEAD까지의 커밋을 한 번에 Rebase 한다.
◽️ 커밋 하나로 합치기
1. 로그는 이렇게 쌓여있다.
2. git log로 commit id를 확인하고 아래 명령어를 입력한다.
// commit을 하기 전의 id이다.
$ git rebase -i 7d3583f7cb4fa83df489912fa5bdbbb7
3. 아래와 같이 squash 옵션으로 수정한다.
4. Esc > :wq > 엔터를 눌러 변경내용을 저장한다.
여기서 커밋 메세지를 변경할 수 있다.
5. 끝!
출처 및 참고
프로 Git, Scott Chacon, 2014