source

커밋 메시지로 Git 저장소를 검색하는 방법

nicesource 2023. 4. 19. 23:14
반응형

커밋 메시지로 Git 저장소를 검색하는 방법

나는 "Build 0051"이라는 커밋 메시지와 함께 GIT에 소스 코드를 체크했다.

하지만 더 이상 소스 코드를 찾을 수 없는 것 같습니다. 명령줄을 사용하여 GIT 저장소에서 소스를 추출하려면 어떻게 해야 합니까?

갱신하다

  1. SmartGIT를 사용하여 버전 0043, 0044, 0045 및 0046을 확인.
  2. 0043을 체크 아웃 하고, 다른 브랜치에서는 0051까지의 버전을 체크 인.
  3. 0043을 다시 확인했습니다.
  4. 이제 0051이 사라졌습니다.

갱신하다

소스코드는 확실히 존재하고 있습니다.이제 소스코드를 체크해 보겠습니다.

C:\Source>git log -g --grep="0052"
commit 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
Reflog: HEAD@{10} (unknown <Mike@.(none)>)
Reflog message: commit: 20110819 - 1724 - GL: Intermediate version. File version:  v0.5.0 build 0052.
Author: unknown <Mike@.(none)>
Date:   Fri Aug 19 17:24:51 2011 +0100

    20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052.

C:\Source>

지정된 텍스트를 커밋 로그(모든 브랜치)로 검색하려면 다음 절차를 수행합니다.

git log --all --grep='Build 0051'

grep 검색에서 대소문자를 무시한 채 이를 수행하려면 다음 절차를 수행합니다.

git log --all -i --grep='Build 0051'

Repo 이력을 통해 커밋의 실제 내용을 검색하려면 다음을 사용합니다.

git grep 'Build 0051' $(git rev-list --all)

지정된 텍스트의 모든 인스턴스, 포함된 파일 이름 및 commit sha1을 표시합니다.

대소문자를 무시한 채 이 작업을 수행하려면 다음을 사용합니다.

git grep -i 'Build 0051' $(git rev-list --all)

이렇게 하면 차이 변경뿐만 아니라 각 단계에서 커밋 내용 전체가 검색된다는 점에 유의하십시오.diff 변경만 검색하려면 다음 중 하나를 사용합니다.

git log -S[searchTerm]
git log -G[searchTerm]

않은 할 수 .-gflag의 )--walk-reflogs:

git log -g --grep='Build 0051'

것 , 「」를 .reflog신신의당에 의해 중 0051을 .

git reflog

했을 수도 .HEAD'빌드 0051' 커밋이 보이지 않거나 실제로 날려버렸을 수 있습니다.git-ready reflog 기사가 도움이 될 수 있습니다.

reflog에서 커밋을 회복하려면 : 발견된 커밋의 git체크아웃을 실행합니다(및 필요에 따라 새로운 브랜치 또는 태그를 작성하여 참조합니다).

git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889
# alternative, using reflog (see git-ready link provided)
# git checkout HEAD@{10}
git checkout -b build_0051 # make a new branch with the build_0051 as the tip

는 이것을 내 이이에 .~/.gitconfig:

[alias]
    find = log --pretty=\"format:%Cgreen%H %Cblue%s\" --name-status --grep

그런 다음 "git find string"을 입력하면 메시지에서 해당 문자열을 포함하는 모든 커밋 목록이 나타납니다.예를 들어 티켓 #33을 참조하는 모든 커밋을 검색하려면 다음 절차를 수행합니다.

029a641667d6d92e16deccae7ebdeef792d8336b Added isAttachmentEditable() and isAttachmentViewable() methods. (references #33)
M       library/Dbs/Db/Row/Login.php

a1bccdcd29ed29573d2fb799e2a564b5419af2e2 Add permissions checks for attachments of custom strategies. (references #33).
M       application/controllers/AttachmentController.php

38c8db557e5ec0963a7292aef0220ad1088f518d Fix permissions. (references #33)
M       application/views/scripts/attachment/_row.phtml

041db110859e7259caeffd3fed7a3d7b18a3d564 Fix permissions. (references #33)
M       application/views/scripts/attachment/index.phtml

388df3b4faae50f8a8d8beb85750dd0aa67736ed Added getStrategy() method. (references #33)
M       library/Dbs/Db/Row/Attachment.php

늦었지만, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.:/메시지에 리비전 표기법입니다.를 붙이면 .검색 문자열에 프리픽스를 붙이기만 하면 됩니다.:/ 예: 개요:

git show :/keyword(s)

서 ★★★★<keywords>에는 단일 단어 또는 공백으로 구성된 복잡한 regex 패턴을 사용할 수 있습니다.필요에 따라 다음과 같이 따옴표/부호해 주세요.

git log -1 -p ":/a few words"

또는 특정 지점에서 도달 가능한 가장 가까운 커밋을 찾기 위해 시작 지점을 지정할 수 있습니다. 예를 들어 다음과 같습니다.

git show 'HEAD^{/fix nasty bug}'

git revisions 매뉴얼을 참조해 주세요.

git log --grep="Build 0051"

효과가 있을 것이다

git log --grep=<pattern>
            Limit the commits output to ones with log message that matches the
            specified pattern (regular expression).

이거 먹어봐!

git log | grep -b3 "Build 0051"

에 약간의 추가만 하면 됩니다.git log --all --grep명령어:저 같은 경우에는 메시지 내의 괄호에서 벗어나야 했습니다.

git log --all --grep="\[C\] Ticket-1001: Fix nasty things"

모든 분기를 검색하려면

git log --all --grep='Build 0051'

어떤 약속을 하고 싶은지 알게 되면

git checkout <the commit hash>

먼저 커밋 사용을 나열합니다.

git log --oneline

커밋(Message)의 SHA를 찾은 후

 git log --stat 8zad24d

(8zad24d)는 사용자가 관여하고 있는 커밋(첫 번째 커플의 sha 예(8zad24d))에 의해 어소시에이트된 SHA이며, 올바른 정보를 찾기 위해4 문자, 6 문자, 8 문자 또는 전체 sha를 선택할 수 있습니다.

정확히 일치하는 임의의 문자열(및 regex 특수문자 이스케이프 걱정 없음)을 전달하고 싶은 경우 git log는 --fixed-strings 옵션을 사용합니다.

git log --fixed-strings --grep "$SEARCH_TERM" 

변경이 너무 오래되지 않았다면 그렇게 할 수 있습니다.

git reflog

다음으로 커밋 ID를 체크합니다.

이것은, 다음과 같습니다.

git log --oneline --grep='Searched phrase'

또는 다음과 같습니다.

git log --oneline --name-status --grep='Searched phrase'

명령어가 가장 효과적입니다.

언급URL : https://stackoverflow.com/questions/7124914/how-to-search-a-git-repository-by-commit-message

반응형