git
상위 문서: {{ item.title }} -
git command
Examples
log 검색
$ git log --since=2.weeks # 오늘부터 2주 전까지의 커밋 로그를 본다
$ git log -S test # 변경사항 중 test 검색
$ git log --grep test # test 를 포함하는 커밋 메시지 검색
$ git log ref_a..ref_b # 범위로 로그를 조회한다
$ git log origin/master..HEAD # origin/master 부터 로컬 헤드까지의 커밋을 본다
$ git log ref_a...refb --left-right # ref_a 와 ref_b 의 교집합이 아닌 커밋 목록을 보여준다
$ git log ref_a ref_b ^ref_c # ref_a, ref_b 에는 있고, ref_c 에는 없는 커밋을 본다
$ git log -L :func_name:file_name # 특정 파일의 특정 함수의 히스토리를 본다. 함수 범위는 자동으로 인식한다
특정 커밋에서 변경된 파일 목록만 보기
$ git show f701c86 --name-only --pretty=""
tracked 파일 삭제
$ git rm test.txt # 이후 commit 하면 git 은 test.txt 를 더 추적하지 않는다
$ git rm --cached test.txt # 파일은 삭제하지 않고 git 이 test.txt 를 더 추적하지 않게 한다
$ git rm \*.txt # git rm 에서 * 을 사용하는 방법
tracked 파일 이름 변경
$ git mv fileA fileB # mv, git rm, git add 의 매크로
tag
$ git tag # tag 목록 보기
$ git tag -a tag_name # annotated tag 붙이기. 이후 vim 이 실행, 메시지를 작성한다
$ git tag -a tag_name 8d2c77f # 8d2c77f commit 에 tag 붙이기
$ git tag tag_name # lightWeight tag 붙이기.
$ git push orgin tag_name # push tag
$ git push origin --tags # push 모든 tag
bisect 를 사용하여 이진탐색으로 버그가 있는 commit 찾기
$ git bisect start HEAD a42feb7
$ git bisect run test.sh # test.sh : 오류가 없으면 0, 있으면 1을 리턴하는 셸 스크립트
reflog 사용
$ git reflog # 로컬 HEAD 히스토리를 본다. 너무 오래된 것은 볼 수 없다.
$ git show HEAD@{1} # 로컬 HEAD history 1번을 본다. 즉 git show HEAD 와 똑같다.
commit
$ git commit -v # 커밋 메시지 작성에 참고할 수 있도록, 변경 사항도 보여준다
filter-branch 사용
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD # passwords.txt 파일을 모든 히스토리에서 삭제
$ git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
then
GIT_AUTHOR_NAME="Scott Chacon";
GIT_AUTHOR_EMAIL="schacon@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD # 모든 커밋의 이메일 주소를 수정한다
참고문헌
- 프로 Git 2판 - 그림으로 이해하는 Git의 작동 원리와 사용법 / 스캇 샤콘, 벤 스트라웁 공저 / 박창우, 이성환, 최용재 공역 / 인사이트(insight) / 2016년 03월 30일