2010-08-18 4 views
25

나는 여러 저자가 저지른 일련의 커밋을 가지고 있으며 두 개의 커밋 사이에 git dff 출력을보고 싶지만 작성자 중 하나만 커밋을 고려하고 싶다면 --author with git 로그.작성자 필터가있는 자식 diff가

나는 최종 요약 diff에 관심이 있고 개별 커밋의 diffs에는 관심이 없다.

거기에 쓸모있는 트릭이 있습니까?

+2

정확히 중복되지는 않지만 여기 [코드 검토를위한 관련 변경 사항 추출] (http://stackoverflow.com/questions/78339/extract-relevant-changes-for-code-review)에서 유용한 정보를 찾을 수 있습니다.) –

답변

19

여기에서의 문제는 일반적으로이 작업을 수행 할 수 없다는 것입니다. Alice가 특정 파일을 변경 한 다음 Bob이 Alice가 변경 한 부분을 포함하여 변경 한 다음 Alice가 다시 변경합니다. 어떻게 Alice의 두 diff를 하나의 diff로 결합합니까? 두 개의 패치로 가져 가면 두 번째 패치는 Bob의 패치가 먼저 적용되지 않으면 적용되지 않습니다! 그러나 Bob의 변경 사항을 포함하기 때문에 원래 상태와 최종 상태를 단순히 비교할 수도 없습니다.

git 작업의 예제를 선호하는 경우 대화 형 리베이스를 수행하고 임의의 커밋을 삭제하는 것과 같습니다. 물론, 때로는 작동하지만 때로는 완전히 실패 할 것입니다. 왜냐하면 그 커밋 중 하나가 당신이 꺼낸 것 중 하나에 의존하기 때문입니다.

그래서, 난 당신이 개인이 차이점을 커밋하지 않으려 고 말했다 알고,하지만 당신이 정말로 희망 할 수있는 모든입니다 :

git log -p --author=Alice 

단일 DIFF 정말 절망적 인 경우 또는이 얻을 것이다 그것은 당신을 위해,하지만 제가 위에서 언급 한 것처럼 어떤 패치 상호 작용 거기에없는 경우 :

git checkout -b temp first_commit 
git log --pretty=%H --author=Alice first_commit..second_commit | 
while read commit; do 
    git cherry-pick $commit || exit 
done 
# or if you have a new version of git, cherry-pick works with multiple arguments: 
# git cherry-pick $(git log --pretty=%H --author=Alice first_commit..second_commit) 
git diff first_commit temp 

하는 패치는 한 번 적용됩니다 절대적으로 보장이 없기 때문에 이건 정말, 작업 트리에서 작업을 필요로 않습니다 커밋을 건너 뛰었습니다. 너는 그냥보아야한다.

0

당신은 format:<string> 형식은 당신이 표시하려는 정보를 지정할 수 있습니다 diff-tree

format:<string> 

의 서식 기능을 사용할 수있을 수 있습니다.
printf 형식과 약간 비슷하게 작동하며, \n 대신 %n이라는 줄 바꿈을 받는다는 예외적 인 예외가 있습니다.

예컨대,

format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" 

이 같은 것을 보여줄 것입니다 :

The author of fe6e0ee was Junio C Hamano, 23 hours ago 
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<< 

당신은 다음 관련 저자에 grep을 할 수 있습니다.