답변:
가장 최근의 커밋 을 찾으 려면 원하지 않는 git-log
, you은 원하는 git-rev-list
커밋 객체를 해당 커밋 경로에서 가장 최근의 것으로 시작하여 (시간순으로) 나열합니다. 간단히 말해서:
git rev-list -1 <commit> <filename>
를 들어 git-rev-list
귀하의 경우, 당신은 공급 단지 :
이것은 현재 브랜치에서 가장 최근의 커밋 ID를 반환하여 해당 파일을 변경합니다. 215095e2e338525be0baeeebdf66bfbb304e7270
보다 복잡한 예를 들어, 태그 이름과 원격 참조를 사용하고 와일드 카드와 함께 상대 경로 이름을 포함 할 수 있습니다. 예를 들면 다음과 같습니다.
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
...이 분기의 역사에서 가장 최근에 와일드 카드가 변경된 것이 무엇인지 알려줄 것입니다. rev-list에 대한 옵션은 극단적이며 가장 중요한 배관 명령 중 하나이므로 상상할 수있는 기준에 따라 포함하거나 제외 할 수 있습니다.
물론 git-rev-list (1) 매뉴얼 페이지를 참조하십시오 .
git-log
이 열등한 지 설명하지 않았습니다 .
git-log
도자기, git-rev-list
배관입니다.
특정 파일 세트를 수정하기 위해 최신 커밋의 해시를 얻으려면 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
-아직 작성된 버전 태그가없는 경우$VN
일종의 악몽 언데드 SVN처럼 보인다
이것이 원하는 것인지 확실하지 않지만 git log <thefile>
해당 파일을 변경 한 커밋을 얻으려면하십시오. 가장 높은 것을 선택할 수 있습니다. 당신이 찾고있는 것이어야합니다.
git log -n1 -- <thefile>
때 출력을 파이프로 연결 head -1
한다면 수동으로 맨 위 줄을 선택할 필요가 없습니다 (Jo Liss의 답변 참조 )
-n
사용할 수 있다고 생각합니다 -1
.
사용하려는 커밋의 SHA ID가 있으면 해당 커밋에 대해 git log FILENAME
수행 한 작업 git show SHA_ID_HERE
을 확인할 수 있습니다. 전체 ID를 입력 할 필요조차 없습니다. 처음 6 자이면 충분합니다.
git show $(git log -1 --pretty="%H" -- FILENAME)
--all
옵션 을 추가하여 모든 브랜치를 고려할 수 있습니다 .