[GIT] 히스토리 검색하기

Git Grep

  • 기본적으로 대상을 지정하지 않으면 워킹 디렉토링에서 파일을 찾습니다. -n이나 --line-number 옵션을 추가하면 라인 번호도 같이 출력됩니다.
  • $ git grep -n gmtime_r
    compat/gmtime.c:3:#undef gmtime_r
    compat/gmtime.c:8:      return git_gmtime_r(timep, &result);
    compat/gmtime.c:11:struct tm *git_gmtime_r(const time_t *timep, struct tm *result)
    compat/gmtime.c:16:     ret = gmtime_r(timep, result);
    compat/mingw.c:826:struct tm *gmtime_r(const time_t *timep, struct tm *result)
    compat/mingw.h:206:struct tm *gmtime_r(const time_t *timep, struct tm *result);
    date.c:482:             if (gmtime_r(&now, &now_tm))
    date.c:545:             if (gmtime_r(&time, tm)) {
    date.c:758:             /* gmtime_r() in match_digit() may have clobbered it */
    git-compat-util.h:1138:struct tm *git_gmtime_r(const time_t *, struct tm *);
    git-compat-util.h:1140:#define gmtime_r git_gmtime_r
  • -c 또는 --count 옵션을 이용해서 몇 개를 찾았는지 알 수 있습니다.
  • $ git grep --count gmtime_r
    compat/gmtime.c:4
    compat/mingw.c:1
    compat/mingw.h:1
    date.c:3
    git-compat-util.h:2
  • -p 또는 --show-function 옵션을 이용하여 매칭되는 라인이 있는 함수나 메서드를 찾을 수 있습니다.
  • $ git grep -p gmtime_r *.c
    date.c=static int match_multi_number(timestamp_t num, char c, const char *date,
    date.c:         if (gmtime_r(&now, &now_tm))
    date.c=static int match_digit(const char *date, struct tm *tm, int *offset, int *tm_gmt)
    date.c:         if (gmtime_r(&time, tm)) {
    date.c=int parse_date_basic(const char *date, timestamp_t *timestamp, int *offset)
    date.c:         /* gmtime_r() in match_digit() may have clobbered it */
  • --break와 --heading을 옵션을 이용하면 더 읽기 쉬운 형태로 출력됩니다.
  • git grep 명령은 grep이나 ack보다 더 빠릅니다.

Git 로그 검색

  • -S 옵션을 이용해서 해당 문자열이 추가되거나 변경된 커밋만 검색할 수 있습니다.
  • $ git log -S ZLIB_BUF_MAX --oneline
    e01503b zlib: allow feeding more than 4GB in one go
    ef49a7a zlib: zlib can only process 4GB at a time

라인 로그 검색

  • -L 옵션을 이용하여 어떤 함수나 라인의 히스토리를 볼 수 있습니다.
  • $ git log -L :git_deflate_bound:zlib.c
  • git_deflate_bound 함수의 모든 변경 사항을 볼 수 있습니다.

'GIT > Git 도구' 카테고리의 다른 글

[GIT] Git Reset과 Checkout 쉽게 이해하기  (1) 2024.03.18
[GIT] 히스토리 편집하기  (0) 2024.03.18
[GIT] 작업에 서명하기  (0) 2024.03.18
[GIT] Stashing과 Cleaning  (0) 2024.03.11
[GIT] 대화형 명령  (0) 2024.03.11