git을 사용하는 이유 중에 하나인 버전 관리를 하기 위해서는 버전 각각의 체크포인트를 우리는 기록을 해놓아야 한다.
$ git status
tracked 파일 : 이전에 git에서 버전관리를 한 적이 있기 때문에 git에서 수정 여부를 추적한다.
untracked 파일 : 한번도 버전관리를 한 적이 없기 때문에 git에서 수정 여부를 추적할 수 없다.
$ git add 파일명
$ git add .
버전에 사용할 파일들을 타임캡슐에 담았다면 이제 나중을 위해 땅에 묻어야 한다. 그치만 묻기전에 괜한 삽집을 하지 않도록 message를 담은 메모를 달아 놓자.
type(scope) : title
body(본문, 생략 가능)
Resolves : #issueNo, ...(해결한 이슈 , 생략 가능)
See also : #issueNo, ...(참고 이슈, 생략 가능)
- 제목과 본문을 빈 행으로 구분
- 제목은 영문 기준 50글자 이하
- 첫 글자는 대문자로 작성
- 제목 끝에 마침표X
- 제목은 명령문으로 사용, 과거형X
- 본문의 각 행은 영문 기준 72글자 이하
- 어떻게 보다는 무엇과 왜
Type 키워드 | 사용 시점 |
---|---|
feat | 새로운 기능 추가 |
fix | 버그 수정 |
docs | 문서 수정 |
style | 코드 스타일 변경 (코드 포매팅, 세미콜론 누락 등) , 기능 수정이 없는 경우 |
design | 사용자 UI 디자인 변경 (CSS 등) |
test | 테스트 코드, 리팩토링 테스트 코드 추가 |
refactor | 코드 리팩토링 |
build | 빌드 파일 수정 |
ci | CI 설정 파일 수정 |
perf | 성능 개선 |
chore | 빌드 업무 수정, 패키지 매니저 수정 (gitignore 수정 등) |
rename | 파일 혹은 폴더명을 수정만 한 경우 |
remove | 파일을 삭제만 한 경우 |
$ git commit
작업 | Vi 명령어 | 상세 |
---|---|---|
입력 시작 | i | 명령어 입력 모드에서 텍스트 입력 모드로 전환 |
입력 종료 | ESC | 텍스트 입력 모드에서 명령어 입력 모드로 전환 |
저장 없이 종료 | :q | |
저장 없이 강제 종료 | :q! | 입력한 것이 있을 때 사용 |
저장하고 종료 | :wq | 입력한 것이 있을 때 사용 |
위로 스크롤 | k | git log등에서 내역이 길 때 사용 |
아래로 스크롤 | j | git log등에서 내역이 길 때 사용 |
$ git commit -m "FIRST COMMIT"
$ git log
log를 통해 지금까지 땅에 묻어둔 타임캡슐들을 확인할 수 있다.
add
, commit
에 따른 그래프
과거로 돌아가는 방법은 Reset
, Revert
두 가지가 존재한다.
reset
으로 과거로 돌아갔다만 문제를 일으킬 수 있다.예를 들어 [재현]이가 새로운 코드를 짜다가 맘에 들지 않아서 고치던 commit들을 다 날려버리고 다시 과거로 되돌릴려고 한다. 이 때, reset
을 사용해서 되돌리고 Remote repo
에 push
를 할 때 [재현]의 Local repo
에는 없는 commit이 Remote repo
에는 있을 것이고, commit 히스토리가 불일치해서 push
할 때 충돌이 날 수 있다.
하지만 [재현]이 혼자서 진행할땐 git push --force
를 이용해서 강제로 할 순 있지만, [영철]이랑 같은 branch
를 공유하는 협업하는 상황에서는 멋대로 commit 히스토리를 삭제한 [재현]이 탓에 [영철]이가 push
할 때 충돌이 날 것이다.