일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- kotlin spring
- IntelliJ
- 정보처리기사 실기
- kotlin querydsl
- mysql 튜닝
- 티스토리챌린지
- Elasticsearch
- 오블완
- 공부
- CloudWatch
- minikube
- CKA
- PETERICA
- Spring
- aws
- Pinpoint
- kotlin coroutine
- Linux
- CKA 기출문제
- 코틀린 코루틴의 정석
- 정보처리기사 실기 기출문제
- Java
- 기록으로 실력을 쌓자
- AWS EKS
- 정보처리기사실기 기출문제
- AI
- MySQL
- Kubernetes
- kotlin
- APM
- 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 |