
이번 챕터에서는 자주 사용하는 깃 명령어에 대해서 공부한다.
config, helpinit, cloneadd, status, diff, difftool, commit, reset, rm, mv, cleanbranch, checkout, merge, mergetool, log, status, tagfetch, pull, push, remote, archive, submoduleshow, shortlog, describebisect, blame, grepcherry-pick, rebase, revertapply, am, format-patch, imap-send, send-email, request-pullsvn, fast-importgc, fsck, reflog, filter-branchls-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 명령의 반대로 볼 수 있다. 해당 커밋을 되돌리는 커밋을 새로 생성한다.