Git의 기초
저장소 복제
git clone <url>
다양한 프로토콜을 지원한다.
https://
git://
user@server:path/repo.git
파일 상태
- untracked: Git이 추적하지 않는 파일
- tracked: Git이 추적하는 파일.
수정하지 않음,수정함,staged중 하나의 상태를 가진다.
파일 추가 및 변경 확인
git add file/path
untracked 파일을 tracked, staged 상태로 만든다. staged로 만들 때의 내용은 명령어를 실행한 시점 기준이다.
git diff
워킹 디렉토리와 staging area를 비교해서 어떤 라인이 추가/삭제되었는지 확인한다.
git diff --staged
staging area와 저장소를 비교한다.
커밋
git commit
staging area에 속한 스냅샷을 저장소로 커밋한다.
git commit --amend
가장 최근 커밋을 재작성한다.
파일 삭제 및 이름 변경
git rm <file>
tracked 상태의 파일을 삭제한다. 워킹 디렉토리에 있는 파일도 함께 삭제된다.
git rm --cached <file>
워킹 디렉토리의 파일은 남겨두고 staging area에서만 삭제한다.
git mv file_from file_to
파일 이름을 바꾼다.
히스토리 조회
git log # 커밋 히스토리 조회
git log --patch # 각 커밋의 diff를 함께 표시
git log --stat # 각 커밋의 통계 정보를 함께 표시
되돌리기
git reset HEAD <file_name>
파일을 unstage 한다.
git checkout -- <file_name>
해당 파일을 마지막 커밋 상태로 복원한다.
원격 저장소
git remote # 원격 저장소 목록 확인
git remote -v # 원격 저장소 URL 함께 확인
git remote add <remote_name> <url> # 원격 저장소 추가
git remote show <remote_name> # 원격 저장소 정보 확인
git remote rename <name_from> <name_to> # 원격 저장소 이름 변경
git remote remove <remote_name> # 원격 저장소 제거
git fetch <remote_name>
원격 저장소에 있는 데이터를 모두 가져온다. (merge는 하지 않는다)
git pull
원격 저장소의 데이터를 가져오고 자동으로 로컬 브랜치와 merge 한다.
git push <remote_name> <branch_name>
로컬 브랜치를 원격 저장소로 전송한다.
태그
태그는 두 종류가 있다.
- lightweight: 특정 커밋을 가리키는 포인터. 브랜치와 비슷하지만 최신 커밋으로 이동하지 않는다.
- annotated: 태그를 만든 사람, 날짜, 태그 메시지 등의 정보를 함께 저장한다.
git tag # 태그 목록 조회
git tag <tag_name> # lightweight 태그 생성
git tag -a <tag_name> -m <tag_message> # annotated 태그 생성
git tag -a <tag_name> <commit_hash> # 과거 커밋에 태그 생성
git push <remote_name> <tag_name> # 특정 태그 전송
git push <remote_name> --tags # 모든 태그 전송
git checkout <tag_name> # 해당 태그로 checkout
git checkout -b <branch_name> <tag_name> # 브랜치를 생성하면서 해당 태그로 checkout
Alias
git config --global alias.ci commit
sub command의 alias를 생성한다. 이후 git ci로 git commit을 실행할 수 있다.