Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

커밋 관리 본문

Tool/Git & Github

커밋 관리

studyHub 2025. 3. 11. 21:18

프로답게 커밋 관리하기

작업을 커밋할 때 권장사항

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 이전 커밋에 합치기

 

# 특정 커밋의 메시지를 변경하려면

커밋 명령어를 변경할 경우, 모드를 pick에서 reword로 변경한 후 :wq를 누르면 커밋메시지를 변경할 수 있는 모드로 넘어간다. 한번에 하나만 변경 가능하다.

 

# 과거의 특정 커밋을 합치려면

나중 것에 squash를 붙인다.

다음 화면에서 커밋 메시지 편집창으로 넘어가는데, 위쪽 이전 커밋의 메시지를 변경해주면 된다.

 

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

git rebase -i 명령어를 임시 브랜치로 이동한다. 그 브랜치에서 커밋을 변경하고, main에 이어붙이는 것이다.

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

https://www.yalco.kr/@git-github-dive/7-3/

'Tool > Git & Github' 카테고리의 다른 글

원격 저장소  (0) 2025.03.25
브랜치 관리  (0) 2025.03.11
버전 관리  (0) 2025.03.03