| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- minikube
- 공부
- 기록으로 실력을 쌓자
- CloudWatch
- PETERICA
- AI
- Kubernetes
- APM
- tucker의 go 언어 프로그래밍
- Spring
- go
- MySQL
- Java
- 컨텍스트 엔지니어링
- AWS EKS
- kotlin coroutine
- 티스토리챌린지
- 정보처리기사 실기 기출문제
- golang
- LLM
- kotlin
- SRE
- CKA 기출문제
- 코틀린 코루틴의 정석
- aws
- CKA
- Linux
- 바이브코딩
- 오블완
- Pinpoint
- Today
- Total
피터의 개발이야기
[Git] git에서 중간 커밋 합치기, squash 본문
ㅁ 들어가며
git에서 중간 커밋 과정을 정리하는 주요 방법은 git squash이다. git squash를 사용하면 여러 개의 커밋을 하나의 의미 있는 커밋으로 합칠 수 있어 커밋 히스토리를 깔끔하게 관리할 수 있다. 오늘은 중간 커밋을 합쳐주는 squash에 대해서 정리하였다.
ㅁ 체리픽
예전에 [git] 체리픽 Cherry-pick, feature 로그 깔끔하게 merge하기 작성한 글에서, 체리픽은 값만 복사하는 별개의 커밋이지 중간 커밋은 정리가 되지 않았다.

ㅇ 체리픽은 값만 복사해서 dev에 머지를하기 때문에 commit ID가 다른 별개의 커밋이다.
ㅇ 하지만 feature 중간에 히스토리는 그대로 남아 있다.
ㅁ 테스트를 위한 git init
# workspace 생성
mkdir git_test
# git 초기화
git init
# 테스트 커밋
echo "git_squash" > test.txt"


ㅇ 테스트를 위해 다섯개의 커밋을 생성하였다.
ㅁ Sourcetree를 이용한 squash 방법

ㅇ 스쿼시하려는 커밋들 중 가장 오래된 커밋의 바로 아래 커밋을 선택한다.
ㅇ 선택한 커밋에서 우클릭하여 "하위 요소 대화식 재배치..."를 클릭

ㅇ 커밋 정정으로 네번째를 선택하고 다섯 번째를 클린한 상태에서 아래의 이전 것과 합치기를 클릭한다.



ㅇ 같은 방법으로 다섯 번째 커밋 +3 squashed commit 상태를 만들었다.
ㅇ 메시지 내용을 정리하기 위해 메시지편집 버튼을 클릭한다.


ㅇ 메시지를 수정하고 확인을 클릭한다.

ㅇ 두번째~다섯번째가 하나의 커밋으로 합쳐졌다.
ㅁ git squash -i 사용법
# HEAD를 사용
git rebase -i HEAD~4
# 커밋 아이디 사용
git rebase -i 7468a95
ㅇ 이 명령어를 실행하면 텍스트 에디터가 열리고 지정한 수의 최근 커밋 목록이 표시된다.
# 탭 키를 이용한 자동완성 기능 사용 시 과거 이력을 볼 수 있다.
$ git rebase -i {tab}
HEAD ORIG_HEAD main
98519ff -- [HEAD] 다섯 번째 커밋 (70 minutes ago)
33a3a02 -- [HEAD^] 네 번재 커밋 (70 minutes ago)
988c4df -- [HEAD^^] 세 번째 커밋 (71 minutes ago)
e9e1791 -- [HEAD~3] 두 번째 커밋 (72 minutes ago)
7468a95 -- [HEAD~4] 첫 번째 커밋 (72 minutes ago)

4개의 커밋 합치기
# 4개의 커밋 합치기
git rebase -i HEAD~4
# 선택을 위한 4개 커밋이 제시 된다.
pick e9e1791 두 번째 커밋
pick 988c4df 세 번째 커밋
pick 33a3a02 네 번재 커밋
pick 98519ff 다섯 번째 커밋

커밋 squash 지정

ㅇ 에디터에서 합치고 싶은 커밋 앞의 'pick'을 'squash' 또는 's'로 변경한다.
ㅇ 커밋 Squash 지정 시 맨 이전의 commit은 선택하면 안된다.
커밋 메시지 정리

ㅇ 두번째 커밋을 커밋 합치기로 수정하였다.

ㅇ 주석을 제외한 모든 부분이 커밋 메시지로 정리된다.
ㅁ gir rebase --abort, 초기화 방법
모두 커밋 squash 지정하면

error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.
ㅇ 두번째 커밋을 s로 바꾸면 위의 경고가 발생한다.

ㅇ 이런 경우 git rebase --abort를 명령어를 사용해서 초기화 한다.
ㅁ git reset 사용법
git reset HEAD~[커밋 개수]

ㅇ 이 명령어는 지정한 수의 최근 커밋을 취소하고 변경사항을 staged 상태로 되돌린다.

ㅇ 필요한 수정을 진행할 수 있다.
ㅇ 수정된 내용은 새로운 커밋으로 생성된다.
ㅁ 함께 보면 좋은 사이트
'Programming > GitHub' 카테고리의 다른 글
| [Git] Linux 서버에서 SSH 키를 사용하여 GitHub에 접속하는 방법 (0) | 2025.01.14 |
|---|---|
| [Git] Git 사용법: 간단한 정리 (0) | 2024.09.06 |
| [Git] GitHub Actions 노드 버전 문제 해결하기, node20 업그레이드 방법 (0) | 2024.07.25 |
| [Git] 깃허브(Github) 프로필 README 추가방법 (0) | 2024.02.13 |
| [github] GitHub Action으로 티스토리 블로그 코롤링하여 커밋하기 (0) | 2024.02.13 |