2013-08-08 2 views
20

힘내-DIFF 매뉴얼 페이지가 인덱스와 나무,이 나무, 또는 변화 사이의 변화 사이에 을 변경, 자식은 diff 작업 트리와 인덱스 또는 나무 사이git commit과 working directory의 차이점은 무엇입니까?

표시 변경에 사용되는 것을 말한다 디스크의 두 파일 사이에 .

하지만 HEAD 이전의 커밋과 작업 디렉토리의 차이점을 표시하려면 어떻게해야합니까? 그게 가능하니?

답변

27

네,하지만 "현재 프로젝트 상태"에 대한 정의가 약간 다릅니다. git diff의 매뉴얼이 계속된다.

git diff [--options] --cached [<commit>] [--] [<path>...] 

이 양식은 이름 <commit>에 비해 커밋 당신이 다음에 대한 단계별 변경 내용을 볼 수 있습니다 :

당신이 과 비교에 관심이 있다면

변화를 벌였다. 일반적으로 최신 커밋과의 비교가 필요하므로 <commit>을 지정하지 않으면 HEAD가 기본값으로 사용됩니다. HEAD가 존재하지 않거나 (예 : 태어나 지 않은 가지) <commit>이 제공되지 않으면 모든 단계적 변경 사항이 표시됩니다. --staged--cached의 동의어입니다. 당신이 unstaged 변경과 비교에 관심이 있다면

:

git diff [--options] <commit> [--] [<path>...] 

이 양식 명명 된 <commit>로 작업 트리 상대에있는 변경 사항을 확인하는 것입니다. HEAD를 사용하여 최신 커밋과 비교하거나 분기 이름을 사용하여 다른 분기의 팁과 비교할 수 있습니다.

아니면 어떤이 커밋을 비교 단지 관심이 있다면 (하나가 될 수 HEAD는) :

git diff [--options] <commit> <commit> [--] [<path>...] 

이 임의의 두 <commit>들 사이의 변경 사항을 확인하는 것입니다.

그래서 당신은 someOldCommit 현재 HEAD의 차이를 볼 수 git diff someOldCommit HEAD를 실행할 수 있습니다.

+1

"현재 프로젝트 상태"라는 말은 작업 디렉토리를 가리키며 조금 분산되어 있습니다. 내 질문을 업데이트했습니다. – HelloGoodbye

+2

답변 해 주셔서 감사합니다. 그래서''git diff [--options] [-] [ ...]'내가 찾고 있던 것이었다. 필자의 경우에는 옵션을 사용할 필요가 없기 때문에 현재 경로 안에서 차이점 만 가져야한다. 왜냐하면이 방법은'git diff '으로 줄어든다. – HelloGoodbye

+1

또는 전체 경로를 비교하고 싶기 때문에 저장소와 최상위 디렉토리에있을 수는 없지만,'git diff '가 필요합니다. 스크립트에서 이것은'git diff "$ (git rev-parse --show-toplevel)"'이 될 것입니다. – HelloGoodbye