source

파일을 수정한 가장 최근의 git commit을 어떻게 찾습니까?

lovecheck 2023. 6. 26. 21:27
반응형

파일을 수정한 가장 최근의 git commit을 어떻게 찾습니까?

소스 파일을 수정한 가장 최근의 커밋을 찾고 싶습니다.

사용할 수 있습니다git blame각 행별로 커밋 날짜를 모두 표시하지만 파일을 마지막으로 터치한 커밋 날짜를 정확히 확인하기는 어렵습니다.

git 저장소에서 지정된 파일을 마지막으로 터치한 커밋을 어떻게 찾을 수 있습니까?

git log 에서는 특정 파일(및 디렉터리)의 기록을 볼 수 있으므로 다음과 같이 부를 수 있습니다.

git log my/file.c

스크립트에서 사용하는 등 가장 최근의 커밋을 하나만 나열하려면-n 1옵션:

git log -n 1 --pretty=format:%H -- my/file.c

--pretty=format:%h말한다git log커밋 해시만 표시합니다.--구분 기호는 파일 이름이 모호할 경우를 대비하여 파일 이름이 커밋 이름으로 해석되는 것을 방지합니다.

가장 최근의 커밋을 찾고자 하는 경우에는 다음을 수행할 필요가 없습니다.git-log,너는 원한다git-rev-list여기에는 해당 커밋 경로에서 해당 파일을 변경하는 커밋 개체가 가장 최근의 파일(시간순으로)부터 나열됩니다.간단히 말해,

git rev-list -1 <commit> <filename>

위해서git-rev-list당신의 경우, 당신은 단지 다음을 제공합니다.

  • 포함할 커밋 수 또는 가장 최근의 경우에만 -1,
  • 되돌아보기 시작할 분기(또는 커밋 ID), 이미 사용 중인 경우 HEAD 또는 --모든 알려진 커밋을 원하는 경우 모두.
  • 파일의 상대 경로입니다.

현재 분기에서 해당 파일을 변경할 최근 커밋 ID(예:215095e2e338525be0baeeebdf66bfbb304e7270

더 복잡한 예에서는 태그 이름과 원격 참조를 사용하고 와일드카드로 상대 경로 이름을 포함할 수 있습니다. 예를 들어 다음과 같습니다.

git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt

...이 지점의 기록에서 와일드카드 일치가 가장 최근에 변경된 내용을 알 수 있습니다.rev-list 옵션은 매우 광범위하며, 가장 중요한 배관 명령 중 하나이므로 상상할 수 있는 거의 모든 기준으로 포함하거나 제외할 수 있습니다.

물론 git-rev-list (1) Manual 페이지를 참조하십시오.

특정 파일 집합을 수정하기 위해 최신 커밋의 해시만 가져오려면(그리고 방지하려면)awk) 사용할 수 있는 항목:

git log -n 1 --pretty=format:%h -- <path>

이것은 나중에 사용할 커밋 해시를 가져오는 데 유용할 수 있습니다.git describe.

예를 들어 (누구에게나 유용한 경우)…

소스 파일을 변경하기 위한 최신 커밋을 고려하여 현재 버전 ID를 만듭니다(다음과 같은 태그로 버전을 표시한다고 가정).mycode-1.2.1):

COMMIT=$(git log -n 1 --pretty=format:%h -- *.c *.h)
if VN=$(git describe --always --abbrev=5 --match "mycode-*" $COMMIT 2>/dev/null) &&
case "$VN" in
mycode-*)
    git update-index -q --refresh
    test -z "$(git diff-index --name-only HEAD *.c *.h)" ||
    VN="$VN-mod" ;;
*) VN="mycode-unknown-g$VN" ;;
esac
then
    continue
else
VN="mycode-unknown"
fi

이를 통해 다음과 같은 ID가 생성됩니다.

  • mycode-1.2.1 원본 파일의 현재 상태가 태그가 지정된 버전에 해당하는 경우
  • mycode-1.2.1-g3k7s2 소스 파일의 현재 상태가 태그가 지정된 버전 다음에 커밋하는 경우
  • mycode-1.2.1-g3k7s2-mod 태그가 지정된 버전 다음에 마지막으로 커밋한 이후 원본 파일의 현재 상태가 수정된 경우
  • mycode-unknown 버전 태그가 아직 생성되지 않은 경우

이게 당신이 원하는 것인지는 모르겠지만 만약 당신이 한다면.git log <thefile>파일을 변경한 커밋을 가져올 수 있습니다.가장 위에 있는 것을 고르시면 됩니다.그것은 당신이 찾고 있는 것이어야 합니다.

이 일단사용커밋를의할있가 SHAID면을 사용하여 보고 싶은 ,git log FILENAME당신은 할 수 있어야 합니다.git show SHA_ID_HERE당신이 그 특정한 약속을 위해 무엇을 했는지 보기 위해.전체 ID를 입력할 필요도 없습니다. 처음 6자만 입력해도 충분합니다.

한 줄에 있는 참조만 가져오려면 다음을 시도하십시오.

git log -n1 --oneline <path> | awk '{print $1;}'

언급URL : https://stackoverflow.com/questions/4784575/how-do-i-find-the-most-recent-git-commit-that-modified-a-file

반응형