1. 초기 설정.
# 사용자 이름과 이메일을 등록한다 (커밋 작성자로 기록된다)
git config --global user.name "이름"
git config --global user.email "메일주소"
# 기본 브랜치 이름을 main으로 설정한다
git config --global init.defaultBranch main
# 현재 설정 전체를 확인한다
git config --list
2. 저장소 시작.
# 현재 폴더를 새 저장소로 초기화한다
git init
# 원격 저장소를 복제한다
git clone <url>
# 히스토리를 최소화해 얕게 복제한다
git clone --depth 1 <url>
3. 상태 확인.
# 작업 트리 상태를 확인한다
git status
# 한 줄로 간결하게 확인한다
git status -s
# 스테이징 전 변경 사항을 비교한다
git diff
# 스테이징된 변경 사항을 비교한다
git diff --staged
4. 스테이징과 커밋.
# 특정 파일을 스테이징한다
git add <파일>
# 변경 사항 전체를 스테이징한다
git add .
# 커밋을 생성한다
git commit -m "메시지"
# 스테이징과 커밋을 한 번에 한다 (추적 중인 파일 한정)
git commit -am "메시지"
# 직전 커밋에 현재 변경을 더하고 메시지도 수정한다
git commit --amend
# 직전 커밋에 현재 변경만 더한다 (메시지는 그대로 둔다)
git commit --amend --no-edit
5. 브랜치.
# 브랜치 목록을 확인한다
git branch
# 원격 포함 전체 브랜치를 확인한다
git branch -a
# 브랜치를 생성하고 이동한다
git switch -c <브랜치>
# 기존 브랜치로 이동한다
git switch <브랜치>
# 브랜치를 삭제한다
git branch -d <브랜치>
# 병합하지 않은 브랜치를 강제로 삭제한다
git branch -D <브랜치>
6. 병합과 리베이스.
# 현재 브랜치에 다른 브랜치를 병합한다
git merge <브랜치>
# 다른 브랜치의 여러 커밋을 하나로 합쳐 가져온다 (스테이징만 되므로 커밋이 필요하다)
git merge --squash <브랜치>
git commit -m "메시지"
# 커밋 히스토리를 한 줄로 재정렬하며 병합한다
git rebase <브랜치>
# 충돌을 해결한 뒤 리베이스를 계속한다
git rebase --continue
# 리베이스를 중단하고 원래대로 되돌린다
git rebase --abort
7. 원격 저장소.
# 등록된 원격을 확인한다
git remote -v
# 원격을 추가한다
git remote add origin <url>
# 원격 변경을 병합 없이 내려받는다
git fetch
# 원격 변경을 내려받아 병합한다
git pull
# 커밋을 올린다
git push
# 새 브랜치를 원격에 처음 올리며 추적을 설정한다 (이후로는 git push, git pull만 써도 된다)
git push -u origin <브랜치>
8. 되돌리기.
# 스테이징하지 않은(Unstaged) 변경을 취소한다
git restore <파일>
# 스테이징을 취소한다 (변경은 유지한다)
git restore --staged <파일>
# 스테이징도 취소하고 변경도 취소한다
git restore --staged --worktree <파일>
# 직전 커밋을 취소하되 변경은 스테이징 상태로 유지한다
git reset --soft HEAD~1
# 직전 커밋과 변경을 모두 폐기한다 (주의한다)
git reset --hard HEAD~1
# 특정 커밋을 취소하는 새 커밋을 생성한다 (히스토리를 보존한다)
git revert <커밋>
9. 임시 저장.
# 작업 중인 변경을 임시로 치워둔다
git stash
# 추적하지 않는 파일까지 포함한다
git stash -u
# 저장 목록을 확인한다
git stash list
# 가장 최근 저장을 복원하고 목록에서 제거한다
git stash pop
# 복원하되 목록에는 남겨둔다
git stash apply
10. 히스토리 확인.
# 커밋 히스토리를 확인한다
git log
# 한 줄 요약으로 확인한다
git log --oneline
# 브랜치 그래프까지 함께 확인한다
git log --oneline --graph --all
# 특정 커밋의 정보와 변경 사항을 확인한다
git show <커밋>
# 특정 커밋에서 변경된 파일 목록만 확인한다
git show --name-only <커밋>
# 특정 커밋의 변경 통계를 확인한다
git show --stat <커밋>
# 특정 파일의 각 줄을 누가 언제 바꿨는지 확인한다
git blame <파일>
11. 태그.
# 태그 목록을 확인한다
git tag
# 주석 있는 태그를 생성한다 (작성자와 날짜, 메시지가 함께 기록된다)
git tag -a v1.0.0 -m "메시지"
# 이름만 가리키는 가벼운 태그를 생성한다 (기록이 남지 않는다)
git tag v1.0.0
# 지나간 특정 커밋에 태그를 생성한다
git tag -a v1.0.0 <커밋> -m "메시지"
# 태그가 가리키는 커밋과 변경 사항을 확인한다
git show v1.0.0
# 태그의 종류를 확인한다 (tag이면 주석 있는 태그, commit이면 가벼운 태그다)
git cat-file -t v1.0.0
# 가장 가까운 태그를 기준으로 현재 위치를 표현한다 (가벼운 태그까지 포함하려면 --tags를 붙인다)
git describe --tags
12. 태그 공유와 정리.
# 태그 하나를 원격에 올린다
git push origin v1.0.0
# 모든 태그를 원격에 올린다
git push --tags
# 커밋을 올리면서 거기에 딸린 주석 있는 태그만 함께 올린다
git push --follow-tags
# 원격의 태그 목록을 확인한다 (^{} 줄이 함께 나오면 주석 있는 태그다)
git ls-remote --tags origin
# 태그를 다른 커밋으로 옮긴다 (원격에는 강제로 밀어야 반영된다)
git tag -f -a v1.0.0 -m "메시지"
git push -f origin refs/tags/v1.0.0
# 로컬 태그를 삭제한다
git tag -d v1.0.0
# 원격 태그를 삭제한다
git push origin --delete v1.0.0
# 원격의 태그를 로컬에 그대로 맞춘다 (이미 있는 태그도 덮어쓴다)
git fetch --tags --force
* 참조
Git 공식 문서 (git-scm.com/doc)