rebase
git rebase는 Git에서 브랜치의 커밋 히스토리를 재정렬하고, 지정한 브랜치의 가장 최신 커밋 뒤에 현재 브랜치의 커밋들을 다시 적용하는 명령어이다. 일반적으로 두 가지 상황에서 사용된다:
- 커밋 히스토리를 정리할 때: 여러 개의 중간 커밋을 합쳐서 하나의 커밋으로 만드는 등, 깔끔한 히스토리를 유지하고자 할 때 사용된다.
- 브랜치 간의 변경 사항을 합칠 때: merge와 유사하게 사용되지만, rebase는 커밋을 병합하는 대신 새로운 커밋 뒤에 이어 붙인다. 이로 인해 히스토리가 더 직관적이고 일관되게 유지된다.
rebase squash
Squash는 여러 개의 커밋을 하나로 합치는 작업을 말한다. 이 과정에서 합쳐지는 커밋들의 메시지 또한 하나로 합쳐지게 된다.
지금 진행할 예시에서는 '로그인 퇴근', '로그인 아픔', '로그인 완료' 각각의 파일을 각각 커밋메시지에 넣어준 상황이다. 이때 로그인 완료 커밋을 하고 이전에 있던 '로그인 퇴근', '로그인 아픔'을 '로그인' 커밋으로 합쳐보자.
이런 상황에서 '로그인 퇴근', '로그인 아픔', '로그인 완료'를 '로그인'으로 squash 할 거다.
1. rebase 명령어 실행
git rebase -i HEAD~3
여기서 HEAD~3은 최신 커밋부터 3개의 커밋을 대상으로 하겠다는 의미다. (HEAD는 본인을 포함해야 하기 때문에 로그인 퇴근까지 3이라는 의미다.)
-i는 --interactive의 줄임말로, 인터랙티브 모드를 의미한다. 이 모드에서는 사용자가 원하는 커밋들을 선택하여 합치거나 수정할 수 있다.
• pick: 해당 커밋을 그대로 유지한다.
• squash: 해당 커밋을 이전 커밋과 합친다. 이때 커밋 메시지도 함께 합쳐진다.
• reword: 커밋 내용을 그대로 유지하되, 메시지를 변경한다.
• edit: 해당 커밋에서 작업을 수정하거나 추가할 수 있다.
• drop: 해당 커밋을 삭제한다.
2. 인터랙티브 모드에서 커밋 선택
위 명령어를 실행하면 텍스트 편집기가 열리면서 여기서 각 커밋을 어떻게 처리할지 선택할 수 있다.
pick에서 squash로 변경하여 이전 커밋들과 합친다.
나올 때는 :wq
로 저장하고 나오면 된다.
3. 커밋 메시지 수정
위 편집기에서 나오면 새로운 텍스트 편집기가 나온다. 여기는 커밋 메시지를 수정할 수 있는 편집기다.
기존에 있던 내용을 지우고 '로그인 합치기 완료'로 수정하고 :wq
로 나와준다.
그럼 텍스트 편집기를 나오면서 잘 합쳐진 걸 확인할 수 있다.
commit 메시지는 합쳐졌지만 기존 파일 내용은 그대로 유지된 것도 확인할 수 있다.
4. 다시 되돌리기
git reflog 명령어를 통해 모든 Git 명령의 이력을 확인할 수 있다.
git reflog
(나는 같은 내용을 두 번 했기 때문에 좀 길다,,)
squash 하기 전으로 돌아가려면 reset 해주면 된다.
git reset --hard <squash하기전 마지막 commit 해쉬>
위 명령어를 치면 다시 커밋 내역이 생긴 걸 볼 수 있다.
'ETC' 카테고리의 다른 글
[GIT] 기본 개념 및 명령어 (0) | 2024.08.07 |
---|---|
이메일 프로토콜 이해하기: SMTP, POP, IMAP의 기능과 설정 (2) | 2024.01.21 |
Mac M1에서 iTerm2 꾸미기 - 테마 변경, syntax highlighting 적용 (0) | 2023.12.04 |