Pro git - 2.3

Updated:

Pro git - 커밋 히스토리 조회하기

1. 커밋 히스토리 조회하기

  • git log 실행
user@DESKTOP-AVTBP4I MINGW64 /c/workspace/lotto (master)
$ git log
commit d655dd24ede08a3e8e36bd68ca08899b72d2b821 (HEAD -> master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:57:55 2020 +0900

    리펙토링- 상수 interface로 빼기

commit 8aa6cac711870689408289aa46873890590139f6 (origin/master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:49:15 2020 +0900

    main 함수 작성

commit 3512f4cd77f85a038f695573a122681472c76267
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:39:11 2020 +0900

    리펙토링

commit 903c69ba273e2b5c27092a5ba08af933debbfd1b
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:14:19 2020 +0900

    로또 번호 당첨 메소드 코드 작성

  • 저장소의 커밋 히스토리를 시간순으로 보여준다.
  • 가장 최근 커밋이 먼저 나온다.
  • 이어서 각 커밋의 SHA-1 체크섬, 저자 이름, 자저 이메일, 커밋한 날짜, 커밋 메시지

2. -p, –patch 옵션

  • -p는 각 커밋의 diff 결과를 보여줌
  • -< n >를 붙이면 최근 < n > 개의 결과만 보여줌
$ git log -p -2
commit d655dd24ede08a3e8e36bd68ca08899b72d2b821 (HEAD -> master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:57:55 2020 +0900

    리펙토링- 상수 interface로 빼기

diff --git a/bin/lotto/LottoInterface.class b/bin/lotto/LottoInterface.class
new file mode 100644
index 0000000..05c997a
Binary files /dev/null and b/bin/lotto/LottoInterface.class differ
diff --git a/bin/lotto/LottoMatch.class b/bin/lotto/LottoMatch.class
index 01158a4..ad568dc 100644
Binary files a/bin/lotto/LottoMatch.class and b/bin/lotto/LottoMatch.class differ
diff --git a/src/lotto/LottoInterface.java b/src/lotto/LottoInterface.java
new file mode 100644
index 0000000..1129084
--- /dev/null
+++ b/src/lotto/LottoInterface.java
@@ -0,0 +1,11 @@
+package lotto;
+
+public interface LottoInterface {
+       static final int LOTTO_COUNT = 6;
+       static final int MAX_LOTTO_NUMBER = 45;
+       static final int FIRST_CLASS = 6;
+       static final int SECOND_CLASS = 5;
+       static final int THIRD_CLASS = 5;
+       static final int FOUR_CLASS = 4;
+       static final int FIVE_CLASS = 3;
+}
diff --git a/src/lotto/LottoMatch.java b/src/lotto/LottoMatch.java
index fcddefb..1ed20c0 100644
--- a/src/lotto/LottoMatch.java
+++ b/src/lotto/LottoMatch.java
@@ -8,11 +8,8 @@ class Lotto{
        int bonusNumber;
 }

-public class LottoMatch {
-
-       private static final int LOTTO_COUNT = 6;
-       private static final int MAX_LOTTO_NUMBER = 45;
-
+public class LottoMatch implements LottoInterface{
+
        Lotto lotto;

        public LottoMatch() {
@@ -74,15 +71,15 @@ public class LottoMatch {
        }

        private String returnMatchClass(Lotto userlotto, int matchCount) {
-               if(matchCount == 6) {
+               if(matchCount == FIRST_CLASS) {

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

3. –stat 옵션

  • 각 커밋의 통계 정보를 보여줌
  • 어떤 파일이 수정됐는지, 얼마나 많은 파일이 변경됐는지, 또 얼마나 많은 라인을 추가하거나 삭제했는지 보여준다.
  • 요약정보는 가장 뒤쪽에 보여준다.
$ git log --stat
commit d655dd24ede08a3e8e36bd68ca08899b72d2b821 (HEAD -> master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:57:55 2020 +0900

    리펙토링- 상수 interface로 빼기

 bin/lotto/LottoInterface.class | Bin 0 -> 374 bytes
 bin/lotto/LottoMatch.class     | Bin 2960 -> 2897 bytes
 src/lotto/LottoInterface.java  |  11 +++++++++++
 src/lotto/LottoMatch.java      |  17 +++++++----------
 4 files changed, 18 insertions(+), 10 deletions(-)

commit 8aa6cac711870689408289aa46873890590139f6 (origin/master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:49:15 2020 +0900

    main 함수 작성

 bin/lotto/LottoMatch.class | Bin 2702 -> 2960 bytes
 src/lotto/LottoMatch.java  |   8 ++++++++
 2 files changed, 8 insertions(+)

commit 3512f4cd77f85a038f695573a122681472c76267
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:39:11 2020 +0900

    리펙토링

 bin/lotto/Lotto.class                              | Bin 2449 -> 310 bytes
 bin/lotto/LottoMatch.class                         | Bin 0 -> 2702 bytes
 .../{lottoTest.class => LottoMatchTest.class}      | Bin 2883 -> 2888 bytes
 bin/lotto/LottoNumber.class                        | Bin 317 -> 0 bytes
 src/lotto/{Lotto.java => LottoMatch.java}          |  60 ++++++++++++---------
 src/lotto/{lottoTest.java => LottoMatchTest.java}  |  34 ++++++------
 6 files changed, 51 insertions(+), 43 deletions(-)

commit 903c69ba273e2b5c27092a5ba08af933debbfd1b
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:14:19 2020 +0900

    로또 번호 당첨 메소드 코드 작성

 bin/lotto/Lotto.class     | Bin 2151 -> 2449 bytes
 bin/lotto/lottoTest.class | Bin 2699 -> 2883 bytes
 src/lotto/Lotto.java      |  35 ++++++++++++++++++++++++++---------
 src/lotto/lottoTest.java  |  18 ++++++++++++------
 4 files changed, 38 insertions(+), 15 deletions(-)

commit fb48c973c5f6284ace03021be799ba1d2cce8330
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 19:51:07 2020 +0900

    로또 번호 당첨 결과 알려주는 메소드 테스트 코드 작성

4. --pretty 옵션

  • 히스토리 내용을 보여줄 때 기본 형식 이외에 여러 가지 중에 하나를 선택할 수 있다
  • 몇개 선택할 수 있는 옵션의 값이 있다.
  • oneline 옵션은 각 커밋을 한 라인으로 보여준다. 많은 커밋을 한 번에 조회할 때 유용
  • 추가로 short, full, fuller 옵션도 있는데 이것은 정보를 조금씩 가감해서 보여준다.
$ git log --pretty=oneline
d655dd24ede08a3e8e36bd68ca08899b72d2b821 (HEAD -> master) 리펙토링- 상수 interface로 빼기
8aa6cac711870689408289aa46873890590139f6 (origin/master) main 함수 작성
3512f4cd77f85a038f695573a122681472c76267 리펙토링
903c69ba273e2b5c27092a5ba08af933debbfd1b 로또 번호 당첨 메소드 코드 작성
fb48c973c5f6284ace03021be799ba1d2cce8330 로또 번호 당첨 결과 알려주는 메소드 테스트 코드 작성
6815745505841116de62f4674835f3ab593d8b66 Merge branch 'master' of https://github.com/sunlike0508/lotto
2828cfed97ff276886bdb7531c44a6ba072958f6 보너스 로또 번호 생성으로 랜덤 로또 번호 생성 메소드 수정 및 테스트 코드 추가
971f27c41440075767b34f8bfb66786343e03a08 랜덤로또 번호 중복 체크 리펙토링-클래스 객체로 변경
4e4fc8dc97ed6048997773779113602a7ddc2a70 Update README.md
344ad55a230d958c1630bb090ae445ded93a6f03 Create README.md
8b10b4f679377e93fa2b59d619f2387ba6b8d793 잘못된 방향으로 인하여 원복 후 생성자에서 생성하던 로또번호를 메소드로 추출
c79980cf6d10eba17f563c3fa53d0c6750a895ce 사용자로부터 입력받은 메소드 코드 작성 및 테스트코드 성공
18b2527baa8d58c51f7b95b7910ee11e54772a76 로또번호, 사용자 번호 출력을 위한 숫자 배열 출력 메소드 수정
269411f351cc9e41f061ddd0cb8d5bf3ab2801d0 사용자로부터 입력 받은 숫자 메소드 코드 작성
cc0ae9ad96a3afe221d7091e402421fede582f6e 사용자로부터 입력 받은 숫자 메소드 중복 검사 테스트 코드 작성
75245f7c32bc951419900f2a2e4bb98f93be4dbc 로또번호 변수 이름 카멜표기법으로 변경
118fa96f6c794283f26f9f11a8f4ee44c9ae8b35 사용자로부터 입력 받은 숫자 메소드 중복 검사 테스트 코드 작성
e927f6aa5d9baca0f852f8f9f0815fc446c9ca79 사용자로부터 입력 받은 숫자 메소드 중복 검사 테스트 코드 작성
65ec58e457e7a9203723b5e629558b08980bfe00 중복 검사 하는 메소드 원복
67f78bee3297088dc9274be527c31af8198a3387 로또번호당첨 메소드 테스트 메소드 작성
9eab9dc30b07acdb4e0affd61e39c69f41739ab8 로또번호 보너스 번호 1개 추가하여 상수 7로 변경
bb3c913ce5080ae364fb2b05e0f70915e2945f69 랜덤으로 생성된 로또번호 중복 검사 메소드 테스트 코드 작성
f58869d8104037f821129cba7107a5ef9f4b1746 로또 숫자 출력 메소드 작성
3703d84e93274f361f4a3f0bdb0b8f9e458b2274 리펙토링 - 로또번호전역변수로 빼고 생성 메소드 생성자로 변경
d30913d9402d0db3c1e971f4284c53086372d4dd 리펙토링
7119355db79236336719d9eb6dee590531149096 여섯 개의 중복되지 않는 함수 수정하기-02
d51647f520c5ba8738a94b8ab994093cec306c1d 여섯 개의 중복되지 않는 함수 수정하기
59ac8cad3eeda18f7990c15affdd726a4e60f275 숫자 중복 검사 실패하는 테스트 코드 작성
f657984b289fd489c7dd0875247c32361c33cf3b 숫자 중복 검사하는 메소드 코드 작성
60172ddfa7457b8fd01dd3591eda217942f21af8 숫자 중복 검사하는 테스트 코드 작성
f9537b00a16d39225b30aaddad1d309415fcd402 리펙트링
e4c700cc9b14623aefedc16c4206285ff2ae6a72 랜덤숫자 메소드 코드 작성
80c7f4453131df6c44b99bea7c97398eea54facf 랜덤 숫자 메소드 생성 스모크 코드
3fac317398cfbe40404386ea1dcc0dc458ae2d35 2020-04-27-lotto initial program

5. 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
  • 두 파일 모두 staged 상태이므로 다음 커밋에 포함.
  • 아래는 format 옵션의 옵션들

6. --graph 옵션

  • 브랜치와 머지 히스토리를 보여주는 아스키 그래프를 출력한다.
user@DESKTOP-AVTBP4I MINGW64 /c/workspace/lotto (master)
$ git log --pretty=format:"%h %s" --graph
* d655dd2 리펙토링- 상수 interface로 빼기
* 8aa6cac main 함수 작성
* 3512f4c 리펙토링
* 903c69b 로또 번호 당첨 메소드 코드 작성
* fb48c97 로또 번호 당첨 결과 알려주는 메소드 테스트 코드 작성
*   6815745 Merge branch 'master' of https://github.com/sunlike0508/lotto
|\
| * 4e4fc8d Update README.md
| * 344ad55 Create README.md
* | 2828cfe 보너스 로또 번호 생성으로 랜덤 로또 번호 생성 메소드 수정 및 테스트 코드 추가
* | 971f27c 랜덤로또 번호 중복 체크 리펙토링-클래스 객체로 변경
|/
* 8b10b4f 잘못된 방향으로 인하여 원복 후 생성자에서 생성하던 로또번호를 메소드로 추출
* c79980c 사용자로부터 입력받은 메소드 코드 작성 및 테스트코드 성공
* 18b2527 로또번호, 사용자 번호 출력을 위한 숫자 배열 출력 메소드 수정
* 269411f 사용자로부터 입력 받은 숫자 메소드 코드 작성
* cc0ae9a 사용자로부터 입력 받은 숫자 메소드 중복 검사 테스트 코드 작성
* 75245f7 로또번호 변수 이름 카멜표기법으로 변경
* 118fa96 사용자로부터 입력 받은 숫자 메소드 중복 검사 테스트 코드 작성
* e927f6a 사용자로부터 입력 받은 숫자 메소드 중복 검사 테스트 코드 작성
* 65ec58e 중복 검사 하는 메소드 원복
* 67f78be 로또번호당첨 메소드 테스트 메소드 작성
* 9eab9dc 로또번호 보너스 번호 1개 추가하여 상수 7로 변경
* bb3c913 랜덤으로 생성된 로또번호 중복 검사 메소드 테스트 코드 작성
* f58869d 로또 숫자 출력 메소드 작성
* 3703d84 리펙토링 - 로또번호전역변수로 빼고 생성 메소드 생성자로 변경
* d30913d 리펙토링
* 7119355 여섯 개의 중복되지 않는 함수 수정하기-02
* d51647f 여섯 개의 중복되지 않는 함수 수정하기
* 59ac8ca 숫자 중복 검사 실패하는 테스트 코드 작성
* f657984 숫자 중복 검사하는 메소드 코드 작성
* 60172dd 숫자 중복 검사하는 테스트 코드 작성
* f9537b0 리펙트링
* e4c700c 랜덤숫자 메소드 코드 작성
* 80c7f44 랜덤 숫자 메소드 생성 스모크 코드
* 3fac317 2020-04-27-lotto initial program

7. git log 주요 옵션

8. 조회 제한조건

  • Git은 기본적으로 출력을 pager류의 프로그램을 거쳐서 내보내므로 한 번에 한 페이지씩 보여준다.
  • --since--until 같은 시간을 기준으로 조회하는 옵션은 매우 유용

  • 지난 4주 동안 만들어진 커밋들만 조회하는 명령은 아래와 같다.
user@DESKTOP-AVTBP4I MINGW64 /c/workspace/lotto (master)
$ git log --since=4.weeks
commit d655dd24ede08a3e8e36bd68ca08899b72d2b821 (HEAD -> master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:57:55 2020 +0900

    리펙토링- 상수 interface로 빼기

commit 8aa6cac711870689408289aa46873890590139f6 (origin/master)
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:49:15 2020 +0900

    main 함수 작성

commit 3512f4cd77f85a038f695573a122681472c76267
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:39:11 2020 +0900

    리펙토링

commit 903c69ba273e2b5c27092a5ba08af933debbfd1b
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 20:14:19 2020 +0900

    로또 번호 당첨 메소드 코드 작성

commit fb48c973c5f6284ace03021be799ba1d2cce8330
Author: sunlike0508 <thesin1989@gmail.com>
Date:   Mon Apr 27 19:51:07 2020 +0900

    로또 번호 당첨 결과 알려주는 메소드 테스트 코드 작성

  • 이 옵션은 다양한 형식을 지원한다."2008-01-15" 같이 정확한 날짜도 사용할 수 있고 "2 years 1 day 3 minutes ago" 같이 상대적인 기간을 사용할 수도 있다.

--author 옵션

  • 저자를 지정하여 검색

--grep 옵션

  • 커밋 메시지에서 키워드를 검색할 수도 있다

  • --author--grep 옵션을 함께 사용하여 모두 만족하는 커밋을 찾으려면 --all-match 옵션도 반드시 함께 사용해야 한다.

9. -S 옵션

  • 코드에서 추가되거나 제거된 내용 중에 특정 텍스트가 포함되어 있는지를 검색한다.
  • 예를 들어 어떤 함수가 추가되거나 제거된 커밋만을 찾아보려면 아래와 같은 명령을 사용한다.
$ git log -S function_name
  • 마지막으로 파일 경로로 검색하는 옵션이 있다.
  • 디렉토리나 파일 이름을 사용하여 그 파일이 변경된 log의 결과를 검색할 수 있다.
  • 이 옵션은 -- 와 함께 경로 이름을 사용하는데 명령어 끝 부분에 쓴다.
$ git log -- path1 path2

10. Merge 커밋을 제외한 순수한 커밋을 확인해보는 명령

  • Junio Hamano가 2008년 10월에 Git 소스코드 저장소에서 테스트 파일을 수정한 커밋들이다.
$ 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
  • 총 4만여 개의 커밋 히스토리에서 이 명령의 검색 조건에 만족하는 것은 단 6개였다.