커밋되지 않은 로컬 변경 사항과 원본을 차이점으로 만드는 방법


141

리포지토리를 복제하고 파일 수정을 시작했다고 가정 해 봅시다. 커밋되지 않은 로컬 변경 사항이 있으면 다음 git diff test.txt과 같이 diff를 수행 할 수 있으며 현재 로컬 HEAD와 수정되지 않은 커밋되지 않은 파일 변경 사항의 차이를 보여줍니다. 이러한 변경 사항을 커밋하면 다음을 사용하여 원본 리포지토리와 비교할 수 있습니다git diff master origin/master

그러나 로컬로 커밋 하기 전에 로컬 변경 사항을 서버의 원래 저장소와 비교하는 방법이 있습니까? git diff --cached master origin/master운없이 다양한 순열을 시도했습니다 .


내 로컬의 마지막 커밋 된 버전에서 파일이 얼마나 많이 변경되었는지 알고 싶었습니다. 내 질문에 대한 대답은이 질문이었습니다. 감사!
Souvik Ghosh

답변:


133

원격 저장소가 캐시되어 있다고 가정하면 git fetch이러한 커밋과 비교할 수 있어야합니다. 다음을 시도하십시오 :

$ git fetch origin
$ git diff origin/master

5
아, 훌륭합니다. 열쇠는 주인을 떠나는 것이 었습니다. 필자는 이전에 가져 오기를 수행 한 조합을 시도했지만 수행했을 때 git diff master origin/master여전히 커밋 된 버전과 비교하고있었습니다 (복잡하게도). 그러나 마스터를 제외하면 로컬 변경 사항을 가져온 버전과 비교합니다.
Chaitanya

@Chaitanya 좋은 도움이 될 수 있습니다. 사실은 내가 망할 놈의 약간의 자극을 사용하는 다른 스타일을 찾을 수 있습니다 : 당신이 쓸 필요하면 origin master다른 곳과 origin/master. 아직해야 할 일이 있습니다, IMHO.
JJD

작동하지 않는 것 같습니다 : git diff origin/master리턴 fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.마스터가 원점에 존재하지만, 예를 들어 git fetch origin master
제대로

42

나는 그것이 정확한 질문에 대한 대답이 아니라는 것을 알고 있지만,이 질문 은 지점의 파일과 커밋되지 않은 로컬 파일 을 비교하는 것을 발견 했으며 공유 할 것이라고 생각했습니다.

통사론:

git diff <commit-ish>:./ -- <path>

예 :

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(Eric Boehs에게 파일 이름을 두 번 입력 할 필요가 없어서 감사합니다)


위의 좁고 구체적인 솔루션보다 일반적인 솔루션이 더 좋습니다. 당신이 그것을 발견 한 마음을 공유?
fbicknel

commit-ish콜론 구분 기호 및 세부 정보에 대한 설명서를 찾을 수 없습니다 . git-diff 의 문서는 언급하지 않은 것 같습니다. 나는 그것을 처음 찾은 곳을 기억하지 못할 정도로 오랫동안 그것을 사용했습니다. 아마도 다른 명령에 대한 다른 사람들의 예와 나는 방금 실험했다 git-diff. 나는 또 다른 대답commit-ish 이 현재 내가 생각할 수있는 최선이라고 두려워 합니다.
Nate

3
이것에 대한 좋은 추가는 git diff master:./ -- README.md입니다. 이렇게하면 README.md두 번 입력 할 필요가 없으며 별칭에 쉽게 추가 할 수 있습니다.
Eric Boehs

감사합니다 @EricBoehs, 그것은 좋은 제안입니다.
Nate

1
그 구문은 오히려 ... 나를 위해 작동하지 않는 git diff master: -- README.md./생성 /dev/null소스가 아닌 원격 지사를. git 버전 2.19.0 사용
rustyDev

21

기존 파일의 비 단계적 (비추가) 변경 사항을 보려면

git diff

이것은 새 파일을 추적하지 않습니다. 커밋되지 않은 단계적 변경 사항을 보려면

git diff --cached


9

파일을 시각적으로 비교하려면 다음을 사용할 수 있습니다.

git difftool

변경된 파일마다 diff 앱을 자동으로 시작합니다.

추신 : diff 앱을 설정하지 않은 경우 아래 예제와 같이 수행 할 수 있습니다 ( Winmerge 사용 ).

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

이 변경 사항이 즉시 적용됩니까?
Dilip Raghunathan

궁금한 점이 있는데 질문과 관련이 있는가? git difftool이 로컬 변경 사항을 마스터와 비교하지 않습니까? 그러나 OP는 로컬 변경 사항과 원격 마스터간에이를 원합니다.
infoclogged1

지금까지 가장 쉬운 솔루션
Chris Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.