2011-03-03 3 views
8

사례
꽤 자주 나는 옳지 않은 몇 가지 오래된 코드를 보았습니다. 뭔가 제거 된 것 같습니다 (예 : 가치가없는 루프가 있거나 변수를 생성하지만 사용하지는 않음). 또는 무엇인가를 이해하기 어렵습니다. 이러한 경우 필자는 파일의 해당 섹션의 기록을 실제로 확인해야합니다. 모든 파일이 아니라, 단지 섹션 또는 함수.파일의 특정 부분과 관련된 git 커밋 찾기

이상적인 솔루션
파일 books.cpp의 (아마도 환경과) 라인 10의 역사를 찾을 수

git log books.cpp:10 

같은 간단한 명령은 아마 물어 너무 많은 마술,하지만 당신은 할 그 역사를 해결하는 방법에 대한 아이디어?

내가 시도 무엇
내가 비난를 사용하여 시도하고 그 라인의 커밋 부여하기 전에 커밋을 체크 아웃 한 - 내가 충분히 본 적이 때까지 반복. 그러나 그것은 매우 지루한 작업입니다.

이 기능이 필요하다고 생각하십니까? 그것을 성취 할 수있는 방법이 있습니까? 당신의 경험을 공유하십시오!

+1

git blame에는 증분 출력을보고 파일 범위를 지정할 수있는 강력한 옵션이 있습니다. 맨 페이지로 파고 들었습니까? – CharlesB

+0

이 옵션 "비웃음 --incremental -n 파일 이름"주위를 비틀 었습니까? –

답변

4

힘내는 매우 쉽습니다. 이 같은 것이 당신이 원하는 것을 성취합니까?

#!/bin/bash 

FILENAME=$1 
LINENUMBERS=$2 

for hash in `git log --pretty=format:%h ${FILENAME}` 
do 
    echo "***************** Showing ${FILENAME} at ${hash}" 
    git blame -L ${LINENUMBERS} ${hash} ${FILENAME} 
done 

git-linehistory 같은 같은 경로에이 작은 스크립트를 넣어 같이 호출 :

git linehistory books.cpp 5,15 

그것은 5 ~ 15보기 각에서 같은 라인이 해당 파일에 대해 커밋 무엇을 보여줍니다.

2
  • git blame -L 옵션을 사용하면 출력 할 줄의 범위 또는 원하는 기능과 일치하는 정규식을 지정할 수 있습니다.
  • 특정 커밋에서 책임을 지도록 지정할 수도 있습니다. 그러면 비난 전에 개정을 체크 아웃 할 필요가 없습니다.

간단히 말해서 git blame -L range <commit> <file-name>을 연속해서 호출하여 행 변경 기록을 찾아 볼 수 있습니다.

관련 문제