자세한 CLI 사용법은 아래 링크를 참조.
Git - Reference
Reference
git-scm.com
git init
ex) git init
현재 디렉토리에 .git 이라는 하위 디렉토리를 만든다.
.git디렉토리에는 뼈대파일이 들어있고, 이상태에서는 아직 git이 아무 파일도 관리하지 않는다.
git clone
ex) git clone <url>
저장소를 clone 하고 해당 디렉토리에 하위 git 디렉토리를 만들게 된다.

git clone <url> [dir_name]
같은 repository를 [dir_name] 으로 클로닝 한다
git status
ex) git status [OPTIONS] 현재 git 상태를 확인한다.
[OPTIONS]
- -s , –short : 간단하게 보여준다
플래그

- 왼쪽 : Staging Area 에서 상태
- 오른쪽 : Working Tree 에서 상태

git add
ex) git add [file_name] [OPTIONS]
git이 관리하게 할 파일을 추가한다. (와일드 카드 * 사용 가능)
add명령을 하게되면 해당 파일, 디렉토리를 git 이 추적하게 된다 [OPTIONS]
- -u : deleted 파일들을 stage에 올려준다.
git add -u
git diff
ex) git diff [commit1] [commit2]
커밋간 차이를 비교한다.

ex) git diff file
파일의 변경 내용을 확인한다

git commit
ex) git commit [OPTIONS]
현재 스냅샷을 커밋한다.
[OPTIONS]
- -m [context] : 커밋시 에디터를 켜지 않고 [context]의 내용을 바로 커밋한다
- —amend : 최근 커밋 파일에 수정을 해 추가한다
- -a : add 명령 없이 자동으로 add하고 바로 커밋함.
git commit -am "이렇게 하면 stage에 추가와 동시에 커밋이 됩니다!"
git rm
ex) git rm [OPTIONS] <file_name>
파일을 삭제하는 명령이다.
이 명령을 쓰지 않고 로컬 디렉토리에서 파일만을 삭제하면 파일은 stage에 올라가지 않는다. (즉 변경후 add해주지 않은 상태)
이 상태에서는 git rm을 해주어야 staging area로 올라간다.
만약 git에서만 제거하고 디렉토리에는 남겨두고 싶으면
git rm --cached test.c
옵션을 사용한다.
git mv
ex) git mv A B
A에서 B로 mv명령을 한다.
이 결과는 다음과 같다.
mv A B
git rm A
git add B
git log
ex) git log [OPTIONS]
git 히스토리를 조회한다.
[OPTIONS]
- -p : 각 커밋의 diff 결과를 보여준다
- -2 : 최근 2개의 결과만 보여준다
- –stat : 각 커밋의 통계 정보를 조회한다
- –graph : 그래프를 찍어 보여준다
- –all : 전체 브랜치의 로그를 보여준다
- –pretty [=oneline, =short, =full, =fuller, format] : 각 정보를 조금씩 가감해서 보여준다.
- =format 옵션
- %H : 커밋 해시
- %h : 짧은 길이 커밋 해시
- %T : 트리 해시
- %t : 짧은 길이 트리 해시
- %P : 부모 해시
- %p : 짧은 길이 부모 해시
- %an : 저자이름
- %ae : 저자 메일
- %ad : 저자 시각 (-date옵션 참고)
- %ar : 저자 상대적 시각
- %cn : 커미터 이름
- %ce : 커미터 메일
- %cd : 커미터 시각
- %cr : 커미터 상대적 시각
- %s : 요약
- =format 옵션
git log --pretty=format:"%s %h %an등 포멧"
git log --graph --all
// 자주 사용하는 조합
git revert
ex) git revert [OPTIONS] [commit]
이미 저장소에 올라간 커밋 내용을 되돌린다.
특정 커밋으로 돌아가는게 아닌, 예전 커밋을 새로 추가한 커밋으로 친다는것.
` git revert [돌아갈 commit hash] ` <- 특정 커밋으로 돌아감
` git revert –no-commit HEAD~N..` <- HEAD로 부터 N개의 커밋만큼 되돌아감
revert는 현재 내용을 유지한 채로 과거의 커밋 내용을 가져온후 새로운 커밋을 생성한다
git reset
ex) git reset [OPTIONS] [commit]
[OPTIONS]
- --hard : 해당하는 커밋의 시점으로 head, workingtree, index 모든걸 되돌린다
- --mixed : 해당하는 커밋의 시점으로 head를 옮기고 workingtree는 그대로이다.
index에는 아무것도 없는상태이다 - --soft : 해당하는 커밋의 시점으로 head를 옮기고 workingtree는 그대로다.
index에는 해당시점 workingtree에 대한 현재 workingtree의들어있다.
git merge
ex) git merge <branch>
branch를 합병한다. 이 명령을 실행한 브랜치로 파라미터에 쓰인 브랜치가 합병되는것이다.
ex) 브랜치 A에서 실시 git merge B A <- B merge
- --no-ff : fast-foward를 하지 않고 머지를 합니다.
- PR을 남겨 머지하는 방식과 동일
git remote
원격 저장소를 관리하는 명령이다.
ex) $git remote add [OPTIONS] <name> <url>
해당 url을 리모트 저장소로 추가하는 명령이다
git remote add origin https://gitlab.com/kimjaehyeon/jhkim
ex) git remote remove <name>
해당하는 리모트 저장소를 제거한다.
git remote remove origin
git push
ex) git push <remote> <branch>
해당 리모트의 해당 브랜치로 현재까지 커밋내용을 push한다
git push origin master
git pull
ex) ‘git pull [remote] [branch]`
원격저장소에서 필요한 파일을 다운 + 병합
- 지역브랜치와 원격 저장소의 head가 같은 위치를 가르키게 된다.

65323fa에서 위 두 커밋을 pull한 상태
git fetch
ex) git fetch [remote] [branch]
- 원격 저장소로부터 필요한 파일을 다운 (병합은 없음)
- 지역저장소는 원래 지역 저장소의 커밋위치
- 원격 저장소는 최신 커밋을 가르킨다.
- 여기서 merge까지 하면 pull을 사용한 상태가 된다.

65323fa에서 위 두 커밋을 fetch한 상태
git checkout
ex) git checkout [OPTIONS] <branch>
사용중인 branch 를 바꾼다.
[OPTIONS]
- -t : 원격 저장소에서 사용중이던 브랜치로 바꾼다
git checkout -t origin/jhkim