Git 기초 - 3

태그: ,

카테고리: ,

이 글은 아래의 출처에서 내용을 참고하여 작성하였습니다.
출처 : https://git-scm.com/


커밋 기록 조회


git log

Git에는 히스토리를 조회하는 명령어인 git log 가 있다.
git log 명령을 실행하면 아래와 같이 출력된다.

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

특별한 대상이나 옵션 없이 git log 명령을 실행하면
저장소의 커밋 히스토리를 최근순으로 정렬하고
SHA-1 체크섬, 저자, 이메일, 날짜, 메시지 순으로 보여준다.


–patch

-p, --patch 온션은 각 커밋의 diff 결과를 보여주고
-2 는 최근 두 개의 결과만 보여주는 옵션이다

$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
 spec = Gem::Specification.new do |s|
     s.platform  =   Gem::Platform::RUBY
     s.name      =   "simplegit"
-    s.version   =   "0.1.0"
+    s.version   =   "0.1.1"
     s.author    =   "Scott Chacon"

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
     end

 end
-
-if $0 == __FILE__
-  git = SimpleGit.new
-  puts git.show
-end

이 옵션은 직접 diff를 실행한 것과 같은 결과를 출력하기 때문에 동료가 무엇을 커밋했는지 리뷰하고 빨리 조회하는데 유용하다.


–stat

--stat 옵션은 각 커밋의 통계 정보를 조회해준다.

$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

 Rakefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

 lib/simplegit.rb | 5 -----
 1 file changed, 5 deletions(-)

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

 README           |  6 ++++++
 Rakefile         | 23 +++++++++++++++++++++++
 lib/simplegit.rb | 25 +++++++++++++++++++++++++
 3 files changed, 54 insertions(+)

이 결과에서 --stat 옵션은 어떤 파일이 수정됐는지,
변경된 파일이 몇갠지, 또 얼마나 많은 라인을 추가/삭제 했는지 보여준다.
요약정보는 가장 뒤에 나온다.


–pretty

--pretty 옵션은 선택할 수 있는 값이 있다.

  • oneline 각 커밋을 한 라인으로 보여준다.
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
  • format 원하는 포맷으로 지정해 출력한다.
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
git log --pretty=format 에 쓸 몇가지 유용한 옵션` 포맷에서 사용하는 유용한 옵션.

옵션 값 설명 옵션 값 설명 옵션 값 설명
%H 해시 %an a저자 %cn c커미터
%h 짧해시 %ae a이메일 %ce c이메일
%T 트리 %ad a시각 %cd c시각
%t 짧트리 %ar a상대 시각 %cr c상대 시각
%P 부모        
%p 짧부모     %s 요약

oneline, format 같은 옵션은
branchMerge 히스토리를 시각화해주는
--graph 와 함께 쓰면 좋다.

$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
*  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
*  11d191e Merge branch 'defunkt' into local

git log 주요 옵션

옵션 설명
-p 각 커밋에 적용된 패치를 보여준다.
--stat 각 커밋에서 수정된 파일의 통계정보를 보여준다.
--shortstat --stat 명령의 결과 중에서 수정한 파일, 추가된 라인,
삭제된 라인만 보여준다.
--name-only 커밋 정보중에서 수정된 파일의 목록만 보여준다.
--name-status 수정된 파일의 목록을 보여줄 뿐만 아니라
파일을 추가한 것인지, 수정한 것인지,
삭제한 것인지도 보여준다.
--abbrev-commit 40자 짜리 SHA-1 체크섬 전부가 아니라
처음 몇 자만 보여준다.
--relative-date 정확한 시간이 아니라 “2 weeks ago” 처럼
상대적인 형식으로 보여준다.
--graph 브랜치와 머지 히스토리 정보까지 아스키 그래프로 출력
--pretty 지정한 형식으로 보여준다. 이 옵션에는 oneline, short,
full, fuller, format이 있다. format은 원하는 형식으로
출력하고자 할 때 사용한다.
--oneline --pretty=oneline --abbrev-commit 와 같다.

조회범위제한 옵션

옵션 설명
-(숫자n) 최근 n 개의 커밋만 조회한다.
--since
--after
명시한 날짜 이후의 커밋만 검색한다.
--until
--before
명시한 날짜 이전의 커밋만 조회한다.
--author 입력한 저자의 커밋만 보여준다.
--committer 입력한 커미터의 커밋만 보여준다.
--grep 커밋 메시지 안의 텍스트를 검색한다.
-S 커밋 변경(추가/삭제) 내용 안의 텍스트를 검색한다.
--all-match 다수 조건 옵션 모두 일치하는지 확인.
--no-merges Merge 커밋 제외.

다수의 옵션 사용시 ||가 아닌 &&를 원한다면
--all-match 옵션도 반드시 함께 사용해야 한다.


-S 옵션은 코드에서 추가/제거된 내용 중
특정 값의 포함여부를 검색한다.
특정 함수가 추가/제거된 커밋만을 찾아서 조회하기 좋다.

$ git log -S function_name

-- 옵션은 명령어 맨 끝에 쓰며, 파일 경로로 검색해준다.

git log -- path1 path2

디렉토리나 파일 이름으로 그 파일이 변경된 log
결과를 검색할 수 있다.


사용예시

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
   --before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch

댓글남기기