실무에서 자주 쓰는 git 명령어를 정리한 노트. 어떤 명령어든 --help 를 붙이면 상세 설명이 나온다.
상태 확인
git status— 현재 작업 디렉터리 상태 확인git log— 커밋 히스토리 조회git shortlog— 저자별로 간략하게 정리된 커밋 히스토리
스테이징
git add .— 변경된 모든 파일을 stagegit add 파일명— 해당 파일만 stage
되돌리기 — reset
git reset— 전체 파일 unstagegit reset 파일명— 해당 파일만 unstagegit reset HEAD~1— 직전 커밋을 취소하고 하나 뒤로 이동git checkout 파일명— stage되지 않은 파일의 수정사항 되돌리기
reset의 세 가지 옵션:
| 옵션 | index(staged) | 워킹 디렉터리 |
|---|---|---|
--soft | 유지 | 유지 |
--mixed (기본값) | 취소 | 유지 |
--hard | 취소 | 삭제 |
즉 --soft는 “커밋만 취소하고 add한 상태로 돌려놓음”, --mixed는 “add도 취소, 파일은 남음”, --hard는 “다 날림”이다.
HEAD 대신 커밋 해시 앞 7자리를 써도 된다:
git reset ca85201
되돌리기 — revert
git revert HEADgit revert <커밋해시>
reset은 시간을 되돌리는 것, revert는 특정 커밋을 없던 일로 하는 새 커밋을 만드는 것. 원격에 이미 푸시한 커밋을 되돌려야 할 때는 revert를 써야 한다. reset으로 되돌려서 force-push하면 다른 팀원 히스토리가 꼬인다.
커밋
git commit -m "message"— 커밋 메시지와 함께 커밋git commit -am "message"— add와 commit을 한 번에 (이미 tracked인 파일만 해당)
원격 저장소
git remote add origin <주소>— 원격 저장소 연결 (origin대신 다른 이름도 가능)git remote -v— 연결된 원격 저장소 목록git push <저장소명> <브랜치명>— 지정한 원격으로 푸시git push -u origin master— 최초 한 번만-u로 upstream 설정. 이후엔git push만으로 충분git pull— 원격에서 받아와 자동으로 머지git fetch— 원격에서 받아오기만 하고 머지는 하지 않음
브랜치
git branch— 브랜치 목록과 현재 브랜치 확인git branch <브랜치명>— 새 브랜치 생성git checkout <브랜치명>— 브랜치 전환
출근하면 습관적으로
git branch→git pull origin master. 새벽에 누군가 작업했을 수도 있으니까.
머지
master와 develop 브랜치가 있다고 가정.
git merge develop— 현재 브랜치(master)에 develop을 병합. develop에서 만든 기능을 master에 반영하려면 master로 checkout 후 mergegit merge --abort— 충돌 등으로 머지를 취소git reset --hard HEAD~1— 머지한 것을 다시 끊기 (원격 푸시 전에만 안전)
rebase
커밋 히스토리를 재정렬해서 선형으로 만드는 명령어. 협업 중에는 주의해서 써야 한다. 공용 브랜치에는 절대 rebase 금지.
stash — 작업 중 임시 저장
다른 브랜치로 잠깐 넘어가야 할 때.
git stash # 현재 변경사항 임시 저장
git checkout other # 다른 브랜치로 이동
# ... 작업 후 커밋
git checkout original # 원래 브랜치로 복귀
git stash pop # 스태시 꺼내오기 (리스트에서 제거)
설정
git config --global user.name <이름>git config --global user.email <이메일>