basic

Git의 기초

progit

저장소 복제

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을 실행할 수 있다.