이번 챕터에서는 자주 사용하는 깃 명령어에 대해서 공부한다.
config
, help
init
, clone
add
, status
, diff
, difftool
, commit
, reset
, rm
, mv
, clean
branch
, checkout
, merge
, mergetool
, log
, status
, tag
fetch
, pull
, push
, remote
, archive
, submodule
show
, shortlog
, describe
bisect
, blame
, grep
cherry-pick
, rebase
, revert
apply
, am
, format-patch
, imap-send
, send-email
, request-pull
svn
, fast-import
gc
, fsck
, reflog
, filter-branch
ls-remote
, ls-files
, rev-parse
--bare
옵션으로 워킹 디랙토리 없는 서버 Git 저장소를 복사할 수 있다.--recursive
옵션으로 Clone 할 때 서브모듈까지 Clone할 수 있다.-i
, --interactive
옵션과 함께 대화형 모드로 Stage 할 수 있다.git diff
명령어로 워킹 디렉토리와 Staging Area를 비교할 수 있다.--staged
옵션으로 Staging Area와 마지막 커밋을 비교할 수 있다.git diff <branch1> <branch2>
명령어로 두 브랜치를 비교할 수있다.--check
옵션으로 공백 문자가 커밋 가이드라인에 맞는지 확인할 수 있다.-b
옵션으로 공백을 무시하고 비교할 수 있다.--theirs
, --ours
, --base
옵션으로 충돌난 파일의 상태를 비교할 수 있다.--submodule
옵션으로 서브모듈의 변경 내용을 비교할 수 있다.-a
플래그로 git add를 건너뛸 수 있다.-m
으로 메세지를 파라미터로 남길 수 있다.--amend
옵션으로 가장 최근 커밋과 커밋 메세지를 수정할 수 있다.-S
플래그로 커밋에 서명할 수 있다.--hard
옵션을 주면 워킹 디렉토리도 되돌릴 수 있다. 작업물을 잃어버릴 수 있으므로 주의해야 한다.--hard
옵션은 주로 머지 충돌 시 취소에 사용한다. 유사한 명령어로 git merge --abort
가 있다. 이는 reset 명령어의 Wrapper이다.git branch <branch>
로 브랜치를 만들 수 있다.git branch
만 입력하면 브랜치의 목록을 볼 수 있다.-v
옵션과 함께 쓰면 브랜치마다 마지막 커밋 메세지도 함께 보여준다.--merged
와 --no-merged
옵션으로 머지된 브랜치인지 아닌지 필터링 할 수 있다.-d
옵션으로 삭제할 수 있는 브랜치이다.-D
를 사용한다.-u
옵션으로 트래킹 브랜치를 만들 수 있다. 트래킹 브랜치에서 git pull 명령을 내리면 리모트 저장소로부터 데이터를 내려받아 연결된 리모트 브랜치와 자동으로 Merge 한다.git checkout -b <branch> <remote>/<branch>
로 간단히 트래킹 브랜치를 만들 수 있다.--track
옵션을 사용하여 로컬 브랜치 이름을 자동으로 생성할 수 있다.--conflict=diff3
옵션을 주면 충돌 표시된 파일을 재현할 수 있다. 이 명령은 파일을 다시 Checkout 받아서 충돌 표시된 부분을 교체한다.git merge <branch>
명령을 실행하면 해당 브랜치가 Merge 된다.--squash
옵션은 현재 브랜치에 Merge 할 때 해당 브랜치의 커밋을 모두 커밋 하나로 합쳐서 Merge 한다. 이 때 Merge 커밋은 만들지 않는다. Merge 하는 브랜치의 히스토리는 무시하고 새 커밋을 하나 만들어 Merge 하는 방법이다.-Xignore-all-space
나 -Xignore-space-change
옵션을 주어 다시 Merge 한다. git merge --abort
명령은 Merge 하기 전으로 되돌린다. 완전히 뒤로 되돌리지 못하는 유일한 경우는 Merge 전에 워킹 디렉토리에서 Stash 하지 않았거나 커밋하지 않은 파일이 존재하고 있었을 때뿐이다.--verify-signatures
옵션으로 이 기능을 사용할 수 있다.-p
와 --stat
옵션을 주면 각 커밋 사이에 생긴 변화를 확인할 수 있다. --pretty
와 --oneline
옵션을 주면 히스토리를 좀 더 깔끔하게 볼 수 있다. 이 옵션은 Author나 날짜를 중심으로 히스토리를 보여준다.--decorate
옵션을 주고 히스토리에 브랜치 포인터가 함께 보이도록 하는 방법이 있다. --graph
옵션을 추가하면 히스토리가 어떻게 진행됐는지도 볼 수 있다.branchA..branchB
문법을 이용하면 branchB 에만 있고 branchA 에는 없는 커밋만 걸러서 볼 수 있다. 이 문법은 다양하게 조합할 수 있다.branchA...branchB
문법은 둘 중 한쪽에 속한 커밋만 보여준다. --left-right
옵션을 주면 각각 어느 쪽에 속한 것인지도 보여준다.--merge
옵션은 충돌을 해결할 때 유용하다. --cc
옵션을 사용하면 충돌을 히스토리에 보여준다.-g
옵션을 사용하면 브랜치를 오간 기록인 Reflog도 함께 보여준다.-S
와 -L
옵션을 사용하면 특정 코드에 대한 히스토리만 찾아볼 수 있다. 특정 함수의 히스토리를 보고 싶을 때 사용하면 유용하다.--show-signature
옵션을 사용하면 커밋의 서명 정보까지도 보여준다.git remote show <리모트 저장소 이름>
명령으로 git pull 명령을 실행할 때 master 브랜치와 Merge 할 브랜치가 무엇인지 보여 준다.--verify-signatures
옵션을 주면 Pull 할 때 커밋의 PGP 서명을 검증한다.git push <리모트 저장소 이름> <브랜치 이름>
명령어로 Upstream 저장소에 Push 할 수 있다. git push --delete <branch>
명령으로 원격 서버의 브랜치를 삭제할 수 있다.--tags
옵션을 주고 태그를 Push 할 수 있다.--recurse-submodules
옵션을 사용하는 것이 좋다. 프로젝트를 Push 할 때 서브모듈에 Push 할 게 있으면 서브모듈부터 Push 하므로 매우 편리하다.pre-push
훅에 Push 해도 되는지 검증하는 스크립트를 설정하면 규칙에 따르도록 Push를 검증할 수 있다.-v
옵션을 주어 단축이름과 URL을 함께 볼 수 있다.git remote add <name> <url>
로 추가할 수 있다.git remote show <리모트 저장소 이름>
명령으로 리모트 저장소의 구체적인 정보를 확인할 수 있다.git remote rename
명령으로 리모트 저장소의 이름을 변경할 수 있다.git remote remove
나 git remote rm
명령을 사용한다.git cherry-pick
명령은 커밋 하나만 가져올 때 사용한다. 현 브랜치의 새 커밋으로 적용된다. 이 명령은 브랜치를 통째로 Merge 하기 보다 커밋 한두 개 정도만 Merge 하고 싶을 때 좋다.--onto
옵션으로 히스토리를 두 저장소로 분리할 수 있다.-i
옵션을 주고 이 명령을 실행하면 대화형으로 실행할 수 있다.git revert
명령은 git cherry-pick 명령의 반대로 볼 수 있다. 해당 커밋을 되돌리는 커밋을 새로 생성한다.