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


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.