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

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

git blame각 줄의 커밋 날짜를 모두 볼 수는 있지만 파일을 마지막으로 터치 한 커밋이 무엇인지 정확히 알기가 어렵습니다.

내 자식 저장소에서 주어진 파일을 건드린 마지막 커밋을 어떻게 찾을 수 있습니까?



답변

git log 특정 파일 및 디렉토리의 기록을 볼 수 있도록 지원하므로 다음과 같이 호출 할 수 있습니다.

git log my/file.c

스크립트에서 사용하기 위해 가장 최근의 커밋 하나만 나열 하려면 다음 -n 1옵션을 사용하십시오 .

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

--pretty=format:%hgit log커밋 해시 만 표시하도록 지시 합니다. --separater는 모호한 그냥 경우,이 이름을 커밋으로 해석하기에서 파일 이름을 중지합니다.


답변

가장 최근의 커밋 을 찾으 려면 원하지 않는 git-log, you은 원하는 git-rev-list커밋 객체를 해당 커밋 경로에서 가장 최근의 것으로 시작하여 (시간순으로) 나열합니다. 간단히 말해서:

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

를 들어 git-rev-list귀하의 경우, 당신은 공급 단지 :

  • 포함 할 커밋 수 또는 가장 최근의 경우 -1
  • 다시 볼 분기 (또는 커밋 ID), 이미있는 경우 HEAD 또는 알려진 모든 커밋을 원하면 –all
  • 파일의 상대 경로입니다.

이것은 현재 브랜치에서 가장 최근의 커밋 ID를 반환하여 해당 파일을 변경합니다. 215095e2e338525be0baeeebdf66bfbb304e7270

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

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

…이 분기의 역사에서 가장 최근에 와일드 카드가 변경된 것이 무엇인지 알려줄 것입니다. rev-list에 대한 옵션은 극단적이며 가장 중요한 배관 명령 중 하나이므로 상상할 수있는 기준에 따라 포함하거나 제외 할 수 있습니다.

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


답변

특정 파일 세트를 수정하기 위해 최신 커밋의 해시를 얻으려면 awk다음을 사용할 수 있습니다.

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

with를 사용하여 커밋 해시를 얻는 데 유용 할 수 있습니다 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>해당 파일을 변경 한 커밋을 얻으려면하십시오. 가장 높은 것을 선택할 수 있습니다. 당신이 찾고있는 것이어야합니다.


답변

한 줄에 심판을 얻으려면 다음을 시도하십시오.

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


답변

사용하려는 커밋의 SHA ID가 있으면 해당 커밋에 대해 git log FILENAME수행 한 작업 git show SHA_ID_HERE을 확인할 수 있습니다. 전체 ID를 입력 할 필요조차 없습니다. 처음 6 자이면 충분합니다.


답변