2011-04-05 2 views
10

나는 어딘가에서 줄이 끊어진 파일을 가지고 있으며, 여전히 고정되어있는 마지막 지점을 발견했다.git을 사용하여 두 개의 커밋 중 하나의 파일 비교

나는 자식을 사용하여 어떻게 두 개의 커밋에서 하나의 파일을 비교할 수 있는지 알고 싶습니다. 실제로이 파일을 재생하는 가장 좋은 방법입니다. 당신은 그냥 모두를 통해 볼 수,

git diff master f4l4f3l -- src/toaster.c 

대안으로 :

답변

14

직접 당신이 단지 수, 당신이 당신의 master 현재와 f4l4f3l 커밋 이전 사이에 파일 src/toaster.c을 비교한다고 가정, 귀하의 질문에 대답하려면 해당 파일에 대한 변경 사항은 : 당신이 찾으려고하는 경우

git log -p -- src/toaster.c 

더 일반적으로, 그러나, 여기서 AP를 저지 관절염 버그가 소개되었고, 자식은 git bisect라고하는 놀라운 도구를 가지고 있습니다. 이 도구에 작동 및 작동하지 않는 커밋을 지정하면 이진 검색 전략을 사용하여 해당 도구를 테스트 할 일련의 커밋을 제공합니다. 당신은 명령으로 양분 시작할 것

:

현재는 버그가 커밋 경우
git bisect start 

, 당신은 할 수 :

git bisect bad 

다음, 당신은 오래된 확실히 것을 저지 찾을 필요 벌레가 없었어. 이것은 특정 태그를 가질 수도 있고, 아니면 몇 달 전에 커밋을 선택했을 수도 있습니다. 당신이 할 것, 하나 a12b3d라고 가정하자 : 그 시점에서

git checkout a12b3d 
git bisect good 

을, 자식은 테스트해야합니다 커밋하고 커밋로 이동합니다 git checkout을 다음 밖으로 작동합니다. (이러한 체크 아웃은 모두 "분리 된 HEAD"로되어 있으므로 원래 분기 포인터는 변경되지 않습니다.) 그런 다음 커밋을 테스트하고 버그가 있는지 여부에 따라 git bisect good 또는 git bisect bad을 실행합니다. 리비전 사이의 이진 검색은 첫 번째 불량 커밋까지 신속하게 범위를 좁히고 어떤 커밋인지보고합니다. 그런 다음 다시 당신이 무엇을하고 있는지에 가고, 당신은 할 수 있습니다 :

git bisect reset 
+0

감사합니다.하지만 시작하기 전에 버그가없는 커밋을 찾은 후에 'bisect good'을 사용하지 않아야합니까? –

+0

죄송합니다, 예 - 'git checkout a12b3d; git bisect good'. 나는 그 대답에서 오타를 바로 잡았다. –

+0

좋아요, 그래서 저는 저의 커밋을 발견했고, 무엇이 잘못되었는지 알 수 있습니다. 지금 그것을 바꾸고 앞으로 나아가는 가장 좋은 방법은 무엇입니까? –

3
$ git diff $start_commit..$end_commit -- path/to/file 

는 예를 들어, 당신은 지금 다시 두 커밋

$ git diff HEAD^^..HEAD -- file.c 
간 파일 "file.c는"에 대한 차이를 볼

나는 당신에게 도움이되기를 바랍니다.

+0

http://hekate.homeip.net/2010/03/git-comparing-changes-between-commits/ –