커밋 관리
작업을 커밋할 때 권장사항
하나의 커밋에는 한 단위의 작업을 넣는다.
한 작업을 여러 버전에 걸쳐 커밋하지 않는다.
여러 작업을 한 버전에 커밋하지 않는다.
커밋 메시지는 어떤 작업이 이뤄졌는지 알아볼 수 있어야 한다.
커밋 메시지 컨벤션
공통으로 사용되는 커밋 메시지 작성방식
type: subject
body (optional)
...
...
...
footer (optional)예시
feat: 압축파일 미리보기 기능 추가
사용자의 편의를 위해 압축을 풀기 전에
다음과 같이 압축파일 미리보기를 할 수 있도록 함
- 마우스 오른쪽 클릭
- 윈도우 탐색기 또는 맥 파인더의 미리보기 창
Closes #125Type
feat
새로운 기능 추가
fix
버그 수정
docs
문서 수정
style
공백, 세미콜론 등 스타일 수정
refactor
코드 리팩토링
perf
성능 개선
test
테스트 추가
chore
빌드 과정 또는 보조 기능(문서 생성기능 등) 수정
Subject
커밋의 작업 내용 간략히 설명
Body
길게 설명할 필요가 있을 시 작성
Footer
Breaking Point가 있을 때특정 이슈에 대한 해결 작업일 떄
Gitmoji를 사용해서 Type을 이모티콘으로 표현할 수도 있다.
세심하게 스테이징 하고 커밋하기
다음 명령어로 hunk별 스테이징을 진행할 수 있다.
git add -p?: 옵션 설명 보기y또는n으로 각 헝크 선택이러면 한 파일에 대해서도 변경사항을 보다 세세하게 다루게 된다. 때문에 자연스럽게 같은 파일인데도
Staging area에도 있고,Working directory에 있게 된다.
변경사항을 확인하고 커밋하기
git commit -v이 명령으로 무엇이 변경되었나를 확인해보고 커밋을 진행할 수 있다.
위
git add -p로 헝크 별로 커밋을 하면 같은 파일 이더라도 부분(파트)별로 세세하게 나누어서 커밋을 할 수가 있다.
변경사항을 확인만 하기
git diff --stagedgit commit -v는 변경사항 확인과 커밋을 동시에 하는 작업이라면git diff --staged는 변경사항을 확인만 하는 작업을 한다.
커밋하기 애매한 변화 치워두기
현재 변경사항 치워두는 명령어
git stashgit add로 스테이징에 올라가 있는 파일만 치워둔다.git stash save와 같다.
원하는 시점, 원하는 브랜치에서 다시 적용하기
git stash pop가장 마지막에 치워둔 변경사항을 적용한다.
pop말고apply도 있는데,pop은 스태시를 삭제하면서 적용하고apply는 적용하고 삭제하지는 않는다.
원하는 것만 치워두기
git stash -pgit add -p처럼 세세하게 스태시 처리 할 수 있다.가장 마지막에 변경된 파일부터 물어본다.
메시지와 함께 스태시
git stash -m "메시지"스태시 목록 보기
git stash list리스트 상의 번호로
apply,drop,pop을 할 수 있다.예)
git stash apply stash@{1}
참고로 스태시를 적용 한다는 것은 바로 커밋이 되어버리는 게 아니라 변경사항을 추가한다는 것이다. 즉, 변경사항을 적용하고 추가 작업을 해서 add후 커밋할 수 있는 것이다.
Stash 사용법 정리
git stash
현 작업을 치워두기
끝에 save 생략
git stash apply
치워둔 마지막 항목(번호 없을 시) 적용
끝에 번호로 항목 지정 가능
git stash drop
치워둔 마지막 항목(번호 없을 시) 삭제
끝에 번호로 항목 지정 가능
git stash pop
치워둔 마지막 항목(번호 없을 시) 적용 및 삭제
apply + drop
git stash branch(브랜치명)
새 브랜치를 생성하여 pop
충돌사항이 있는 상황 등에 유용
git stash clear
치워둔 모든 항목들 비우기
커밋 수정하기
마지막 커밋 메시지 수정하기
git commit --amend또는
git commit --amend -m "메시지"과거 커밋 내역을 수정하는 다양한 방법
p, pick
커밋 그대로 두기
r, reword
커밋 메시지 변경
e, edit
수정을 위해 정지
d, drop
커밋 삭제
s, squash
이전 커밋에 합치기
git rebase -i (변경하고 싶은 대상 커밋 바로 이전 커밋 해시)이 명령어를 입력하면 편집기로 이동해서 각 커밋에 대해 재설정을 할 수 있다.
e명령어로 수정을 시작하면 개발자가 수정을 마칠 때까지 대기한다.예를 들어 한 커밋을 두 개의 커밋으로 나누어서 커밋을 재시도하려면
git reset HEAD~로 이전 커밋으로 돌아간 다음 변화들을 따로 스테이징 및 커밋 처리를 한다.그리고
git rebase --continue로 수정을 완료한다.
커밋 태그
Git의 Tag
특정 시점을 키워드로 저장하고 싶을 때
커밋에 버전 정보를 붙이고자 할 때
예를 들어 버전이 2.0.0일 때 이렇게 나눌 수 있다.
2.(
MAJOR), 0.(MINOR), 0(PATCH)기존 버전과 호환되지 않을 정보로 API가 바뀌면
MAJOR버전을 올린다.기존 버전과 호환되면서 새로운 기능을 추가할 때는
MINOR버전을 올린다.기존 버전과 호환되면서 버그를 수정한 정도라면
PATCH버전을 올린다.
lightweight
단순히 특정 커밋을 가리키는 용도
annotated
작성자 정보와 날짜, 메시지, GPG 서명 포함 가능
마지막 커밋에 태그 달기(lightweight)
git tag (태그)git tag v2.0.0현존하는 태그 확인
git tag원하는 태그의 내용 확인
git show v2.0.0태그 삭제
git tag -d v2.0.0마지막 커밋에 태그 달기(annotated)
git tag -a v2.0.0입력 후 메시지 작성 또는
git tag v2.0.0 -m '설명'-m태그가-a태그를 암시한다.
원하는 커밋에 태그 달기
git tag (태그명) (커밋 해시) -m '메시지'태그 필터링으로 조회
git tag -l 'v1.*'태그가
v1.으로 시작하는 모든 태그명 조회
원하는 버전으로 체크아웃
git checkout v1.0.0특정 태그 원격에 올리기
git push (원격명) (태그명)GitHub에 태그가 추가된다.
특정 태그 원격에서 삭제
git push --delete (원격명) (태그명)로컬의 모든 태그 원격에 올리기
git push --tagsLast updated