| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- AWS
- DI
- kafka
- 페이징
- MSA
- 서블릿 컨테이너
- JPA
- CORS
- Spring Data JPA
- Spring
- securitycontextholderfilter
- JWT
- @ComponentScan
- 컨테이너
- Web
- 지연 로딩
- Routing Key
- DLQ
- docker
- redis
- JPQL
- mybatis
- 쿠버네티스
- @Transactional
- Dead Letter Queue
- dockerhub
- JdbcTemplate
- 스프링 부트
- Spring Container
- docker compose
- Today
- Total
look-forest
커밋 관리 본문
프로답게 커밋 관리하기
작업을 커밋할 때 권장사항
1. 하나의 커밋에는 한 단위의 작업 (한 작업을 여러 버전에 걸쳐 커밋 x)
2. 커밋 메시지는 어떤 작업이 이뤄졌는지 알아볼 수 있도록 작성
커밋 메시지 컨벤션
type: subject # 커밋의 작업 내용 간략히 설명
body (optional) # 길게 설명할 필요가 있을 시 작성
...
...
...
footer (optional) # Breaking Point 가 있을 때, 특정 이슈에 대한 해결 작업일 때
type 설명
| feat | 새로운 기능 추가 |
| fix | 버그 수정 |
| docs | 문서 수정 |
| style | 공백, 세미콜론 등 스타일 수정 |
| refactor | 코드 리팩토링 |
| perf | 성능 개선 |
| test | 테스트 추가 |
| chore | 빌드 과정 또는 보조 기능(문서 생성기능 등) 수정 |
보다 세심하게 스테이징하고 커밋하기
내용 확인하며 hunk별로 스테이징하기
변경 사항의 조각들을 hunk(덩어리)라고 한다. 띄워쓰기로 나눈다.
아래 명령어로 한 파일이더라도, hunk 별 스테이징을 진행할 수 있다.
git add -p # patch(부분 업데이트)
변경사항을 확인하고 커밋하기
아래 명령어로 스테이징 된 내용의 구체적인 변경 사항을 확인할 수 있다.
git diff --staged
커밋과 함께 diff를 확인하려면 아래 명령어를 사용하면 된다.
git commit -v
커밋하기 애매한 변화 치워두기 (Stash)
작업 중에 다른 작업을 해야한다면, 잠시 하던 작업을 다른 공간에 치워두는 기능
stash를 하려면 우선 트래킹되어야 한다. (git add .)
아래 명령어로 치워두고, 원하는 시점/브랜치에 다시 적용할 수 있다.
파일 단위, 옵션 단위 제어시 push 서브 커맨드를 사용하면 된다.
git stash (push)
git stash pop
원하는 것만 stash 하려면 아래와 같이 hunk를 y/n으로 선택하면 된다.
git stash -p
파일 단위로 stash하는 것도 가능하다.
git stash push file1.txt dir/file2.java
메시지와 함께 스태시 하고 목록을 확인하려면 아래와 같다.
git stash -m 'Add Stash3'
git stash list
- 리스트상의 번호로 apply, drop, pop 가능
git stash apply stash@{1}
Stash 사용법 정리
| git stash | 현 작업들 치워두기 | 끝에 save 생략 |
| git stash apply | 치워둔 마지막 항목(번호 없을 시) 적용 | 끝에 번호로 항목 지정 가능 |
| git stash drop | 치워둔 마지막 항목(번호 없을 시) 삭제 | 끝에 번호로 항목 지정 가능 |
| git stash pop | 치워둔 마지막 항목(번호 없을 시) 적용 및 삭제 | apply + drop |
| 💡 git stash branch (브랜치명) | 새 브랜치를 생성하여 pop | 충돌사항이 있는 상황 등에 유용 |
| git stash clear | 치워둔 모든 항목들 비우기 |
pop = apply + drop
커밋 수정하기
마지막 커밋 수정(메시지만 수정하는게 아니다!)
git commit --amend
# 커밋 메시지 한 줄로 변경하기
git commit --amend -m 'Add members to Panthers and Pumas'
커밋을 수정할 때는 그 시점에서 staging에 있는 내용도 포함된다!
따라서 커밋 메시지를 수정하려는 용도 뿐아니라, 특정 변화를 추가하고 싶을 때도 활용 가능하다!
과거의 커밋들을 수정, 삭제, 병합, 분할하기
git rebase -i (수정할 커밋 바로 이전 커밋) //interactive mode
: 과거 커밋 내역을 다양한 방법으로 수정 가능
- rebase: 커밋 줄기를 옮겨붙인다.
- git rebase 뒤에 브랜치를 생략하면, 현재 브랜치를, 현재 브랜치의 upstream(기준 브랜치) 위로 재배치한다.
- rebase를 사용하는 이유: 과거의 커밋을 바꾸면 그 이후의 커밋에도 영향을 주므로,
이전 커밋 이후의 커밋을 잘라서 임시 브랜치로 만들고, 수정한 뒤 기존에 이어붙인다.

명령어 설명
| p, pick | 커밋 그대로 두기 |
| r, reword | 커밋 메시지 변경 |
| e, edit | 수정을 위해 정지 |
| d, drop | 커밋 삭제 |
| s, squash | 이전 커밋에 합치기 |
# 특정 커밋의 메시지를 변경하려면

# 과거의 특정 커밋을 합치려면
나중 것에 squash를 붙인다.

# 과거의 특정 커밋을 둘로 분리하려면

1) git rebase -i asdf(돌아갈 이전 커밋 해시)에서 e로 변경 후 :wq -> 해당 커밋이 막 생성된 직후 상태인 임시 브랜치 상태가 됨
2) 그 상태에서 git reset HEAD^ -> 직전 커밋으로 돌아가고, working directory에 작업 내역 남음
3) 특정 파일만 add 후 커밋
4) 나머지 파일 add 후 커밋
5) git rebase --continue로 완료
태그
커밋에 태그 달기
태그는 특정 커밋에 v12.3.4 과 같은 버전 이름을 붙이는 것이라고 생각하면 된다.
특정 시점을 키워드로 저장하고 싶을 때, 커밋에 버전 정보를 붙이고자 할 때 사용한다.
버저닝 방식
| 시맨틱 버저닝 (SemVer) | 캘린더 버저닝 (CalVer) | |
| 버전의 기준 | 코드의 변화 (기능/호환성) | 시간의 흐름 (출시일) |
| 대표 형식 | v1.0.0 (Major.Minor.Patch) - Major: 뼈대가 바뀌는 큰 변화 - Minor: 기능 추가 - Patch: 오류 수정 |
v2024.1.5 (Year.Month.Build) |
| 주 사용 대상 | 개발자 (라이브러리, API) | 일반 사용자 (앱, 운영체제) |
| 장점 | 시스템 안정성 보장 (업데이트 사고 방지) | 직관적인 최신성 파악 |
태그의 종류
- lightweight: 특정 커밋을 가리키는 용도
- annotated: 작성자 정보와 날짜, 메시지, GPG 서명 포함 가능
태그 관련 명령어
# 마지막 커밋에 태그 달기 (lightweight)
git tag v2.0.0
# 마지막 커밋에 태그 달기 (annotated)
git tag -a v2.0.0 # 입력 후 메시지 작성
# 또는
git tag v2.0.0 -m 'Gamma Version'
# 특정 버전에 태그 달기
git tag (태그명) (커밋 해시) -m (메시지)
# 태그 확인
git tag
git tag -l 'v1.*' #필터링
# 태그 내용 확인
git show v2.0.0
# 원하는 버전으로 체크아웃
git checkout v1.2.1 # switch로 이전 브랜치로 복귀
# 태그 삭제
git tag -d v2.0.0
원격의 태그와 릴리즈
특정 태그를 원격에 올리고, 배포판 기능인 release를 만들 수 있다.
원격에 태그 동기화
# 특정 태그 원격에 올리기
# git push (원격명) (태그명) -> github에서 확인
git push origin v2.0.0
#로컬의 모든 태그 원격에 올리기
git push (원격명) --tags
# 특정 태그 원격에서 삭제
git push --delete (원격명) (태그명)
Github의 release
다운로드 가능한 배포판 기능
Github의 태그 목록에서, 원하는 태그를 선택 후 create release

참고 자료 & 이미지 출처
제대로 파는 Git & GitHub - by 얄코
제대로 파는 Git & GitHub - by 얄코 강의 | 얄팍한 코딩사전 - 인프런
얄팍한 코딩사전 | 코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, Git & Github, 얄코와 함께 제대로 판다! ⭐️ 대학교 이메일 계정이 있다면?
www.inflearn.com
'Tool > Git & Github' 카테고리의 다른 글
| 원격 저장소 (0) | 2025.03.25 |
|---|---|
| 브랜치 관리 (0) | 2025.03.11 |
| 버전 관리 (0) | 2025.03.03 |