티스토리 뷰
2.3 Git Basics - 커밋트 히스토리 확인하기
커밋트 히스토리 확인하기
당신은 몇번의 커밋트를 한 이후에 또는 이미 커밋트 히스토리가 있는 레파지토리를 클론을 했다면, 분명 당신은 그전에 어떤 일이 있었는지에 대해 알고 싶을 것이다.이것을 하기 위해 가장 기본적이고 강력한 툴은 바로 git log 명령어이다.
다음 예제는 내가 자주 시현을 하기 위해 사용하는 simplegit 프로젝이다. 이 프로젝트를 받기 위해서는 다음 명령어를 실행하면된다.
git clone git://github.com/schacon/simplegit-progit.git
당신이 이 프로젝트에서 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 code
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
기본적으로 git log는 특별한 인수가 필요없이 레파지토리에서 실행되었던 커밋트들을 발생 역순으로 보여준다. 이것은 가장 최근의 커밋트한 내용이 가장 처음에 보인다는 이야기이다. 당신도 보았듯이, 각 커밋트에는 SHA-1 checksum과 저자의 이름, 이메일, 작성 날짜 그리고 커밋트 메세지가 함께 존재한다.
당신이 정확하게 원하는 것을 찾을 수 있도록 많은 옵션들을 git log에 줄 수 있다. 그리고 여기, 가장 자주 이용하는 옵션들을 알려 주겠다.$ 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.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 code
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
\ No newline at end of file
Diff 명령어를 직접 사용하는 것과 옵션을 줘서 보는 정보는 같다. 이 방법은 코드 리뷰를 하던가 또는 협력자가 추가한 커밋트들에 대해 빠르게 훓어 보는데 매우 유용한다. 그리고 당신은 git log에 정리옵션을 이용할 수 있다. 만약에 당신이 각 커밋트에 대해 축약된 통계를 보고 싶다면, --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 files changed, 1 insertions(+), 1 deletions(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test code
lib/simplegit.rb | 5 -----
1 files changed, 0 insertions(+), 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(+), 0 deletions(-)
당신이 보았듯이, --stat 옵션은 각 커밋트마다 얼마나 많은 파일이 수정되었는지, 변경 되었는지 또는 추가 되거나 삭제되었는지를 출력해준다. 그리고 마지막에 이 정보들을 정리해서 출력해준다. 또다른 유용한 옵션은 --pretty이다. 이 옵션은 기본 출력 포멧이 아니 다른 포멧들로 변경 시켜준다. 이를 위해서 사용할 수 있는 적은 pre built 옵션이 있는다. 그 중 하나로 oneline은 각 commit를 한줄에 나타내 주는데 이것은 당신이 많은 양의 commit를 확인할 때 유용하다. 추가로, short, full 그리고 fuller 옵셥이 있고, 이것들은 크게 보면 비슷한 포멧이고, 그저 정보를 조금 더 또는 조금 덜 보여주는 것이 다를 뿐이다:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
가장 재미있는 옵션은 바로 당신이 당신의 log 출력의 format을 직접 명시할 수 있는 format이라는 옵션이다. 이것은 특별히 기계가 하는 파싱에 대해 출력물을 만들려고 할때 매우 유용한다. 왜냐하면 당신은 명시적으로 포멧을 지정할 수 있기 때문이다. 그리고 이것은 Git에 아무런 변경을 일으키지 않는다:
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 11 months ago : changed the version number
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
a11bef0 - Scott Chacon, 11 months ago : first commit
Table 2-1 lists some of the more useful options that format takes.
Option Description of Output
%H Commit hash
%h Abbreviated commit hash
%T Tree hash
%t Abbreviated tree hash
%P Parent hashes
%p Abbreviated parent hashes
%an Author name
%ae Author e-mail
%ad Author date (format respects the –date= option)
%ar Author date, relative
%cn Committer name
%ce Committer email
%cd Committer date
%cr Committer date, relative
%s Subject
당신은 author와 committer의 차이점에 대해 궁금해 할지 모른다. author는 원래 그 패치를 만든 사람이고, committer는 그 패치를 가장 나중에 적용한 사람이다. 그래서 당신이 패치를 프로젝트에 보내고 핵심 멤버가 그 패치를 적용하면 당신과 그 멤버는 author와 committer로서 인정받을 수 있다. 이것에 대해서는 chapter5에서 좀 더 다루도록 하겠다.
oneline과 format 옵션은 --graph라는 옵션과 같이 사용하면 더 유용하다. 이 옵션은 당신의 브론치와 우리가 Grit 프로젝트를 복사했다는 것을 보여주는 통합 히스토리를 보여주는 ASCII 그래프를 추가해준다:
$ 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에는 간단한 출력 포멧팅 옵션만 줄수 있다(사실 생각보다 많다). 테이블 2-2 리스트에서 우리가 지금까지 알아보았던 옵션들과 다른 보통 포멧팅 옵션들은 log명령 출력내용을 어떻게 변경하느냐에 따라 유용할 수 있다.
Option Description
-p Show the patch introduced with each commit.
--stat Show statistics for files modified in each commit.
--shortstat Display only the changed/insertions/deletions line from the --stat command.
--name-only Show the list of files modified after the commit information.
--name-status Show the list of files affected with added/modified/deleted information as well.
--abbrev-commit Show only the first few characters of the SHA-1 checksum instead of all 40.
--relative-date Display the date in a relative format (for example, “2 weeks ago”) instead of using the full date format.
--graph Display an ASCII graph of the branch and merge history beside the log output.
--pretty Show commits in an alternate format. Options include oneline, short, full, fuller, and format (where you specify your own format).
로그출력 제한하기
출력 포멧팅 옵셥에 더하여, git log는 많은 제한 옵션을 사용한다. 이 옵션들은 당신으로 하여금 오직 커밋트들의 서브셋만 볼 수 있게 해준다. 당신은 이와 비슷한 옵션인 마지막 2개의 커밋트만 보이게 하는 -2를 이미 봤다. 사실, 당신은 -<n>으로 사용할 수 있고, 여기서 n은 마지막 n번째 commit라는 의미이다. 실제적으로 당신은 이것을 자주 사용하진 않을 것이다. 왜냐하면, Git는 디폴트로 한번테 한페이지만큼의 log를 출력하기 때문이다.그러나, 타임-제한 옵션으로는 --since나 --until이 매우 유용하다. 예를 들어, 다음 명령어는 지난 2주동안에 커밋트들을 보여준다.:
$ git log --since=2.weeks
이 명령어는 많은 포멧들과 함께 연동될수 있고 특별히(2008-01-15) 또는 "2 years 1day 3 minutes ago"로 명시할 수도 있다.당신은 커미트할 리스트를 검색조건을 통하여 필터할 수도 있다. --author 옵션은 당신이 특정 author를 필터링 할 수 있도록 해주고, --grep 옵션은 당신으로 하여금 commit 메세지 내용중 특정 키워트로 필터링을 할 수 있도록 해준다.(만약에 당신이 이 2가지 옵션을 동시에 사용하고 싶다면,--all-match 을 추가하던지 아니면 그 명령어를 각가의 commit때 적용해줘야한다.)
git log의 마지막 유용한 필터옵션은 path이다. 만약에 당신의 디렉토리 또는 파일이름을 지정한다면, 당신은 그곳에 있는 파일들의 변경사항에 대한 커밋트들의 로그 출력을 제한 할 수 있다.이것은 언제나 마지막에 오는 옵션이고 보통 --를 이용하여 paths를 분리한다.
In Table 2-3 we’ll list these and a few other common options for your reference.
Option Description
-(n) Show only the last n commits
--since, --after Limit the commits to those made after the specified date.
--until, --before Limit the commits to those made before the specified date.
--author Only show commits in which the author entry matches the specified string.
--committer Only show commits in which the committer entry matches the specified string.
예를 들어, 당신이 만약에 Junio Hamano에 의해서 커밋트 되었던 test 파일들중에 2008년 10월에 아직 통합되지 않은 커밋트에 대해 알고 싶다면, 다음과 실행하면 된다.:
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attribute
acd3b9e - Enhance hold_lock_file_for_{update,append}()
f563754 - demonstrate breakage of detached checkout wi
d1a43f2 - reset --hard/read-tree --reset -u: remove un
51a94af - Fix "checkout --track -b newbranch" on detac
b0ad11e - pull: allow "git pull origin $something:$cur
Git 소스 코드 히스토리가 약 2만건이나 되는데, 이 명령어는 검색조건에 부합하는 딱 6개의 커밋트를 찾아준다..
GUI를 하용하여 히스트리를 그래픽화하기
만약에 당신이 당신의 커밋트 히스토리를 좀 더 그래픽컬하게 보기 위해 툴을 이용하고 싶다면, 당신은 Git에서 제공하는 gitk라고 불리우는 Tcl/Tk 프로그램에 대해서 알고 싶을 것이다. Gitk는 기본적으로 git log 의 그래픽 툴이다. 그리고 이것은 거의 모든 필터링 옵션을 받아드렸다. 만약에 당신이 프로젝트 안에서 gitk라고 치면, Figure 2-2같은 것을 볼 수 있을것이다.
Figure 2-2. The gitk history visualizer.
당신은 윈도우의 상단에 있는 연결형그래픽(ancestry graph)을 통해 commit히스토리를 확인 할 수 있다. 윈도우의 하단에 있는 Diff 뷰어는 당신이 클릭하는 커미트의 변경사항을 보여준다.
'이제 관심밖의 IT 기술 > Pro Git 번역' 카테고리의 다른 글
2.4 Git Basics - 예전으로 되돌리기 (0) | 2012.10.29 |
---|---|
2.2 Git Basics - 변경사항을 저장소에 저장하기 (0) | 2012.10.15 |
2.1 Git Basics - Git 저장소 가져오기 (0) | 2012.09.28 |
Chapter 2 (0) | 2012.09.27 |
1.7 시작하기 - 정리 (0) | 2012.09.26 |
- Total
- Today
- Yesterday
- cert
- 부동산분석
- 옥빌
- 미시사가
- 부모님초청이민
- TORONTO
- Jay
- Canada
- 벌링턴
- Red Hat
- Certificate
- BC주
- RHEL
- BTBS
- docker
- certification
- basement
- 정착서비스
- ansible
- 밀튼
- 온타리오
- RHCE
- 캐나다
- 캐나다부동산
- redhat
- 우드워킹
- 토론토정착서비스
- 인터넷
- git proGit
- 토론토
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |