git : 로컬 저장소의 파일과 원점 사이의 차이점


189

로컬 리포지토리에있는 파일과에있는 파일의 차이점을 찾고 싶습니다 origin master.

이 있다는 것을 알고 git diff있지만이 파일을 하나의 특정 파일로 분리하고 싶습니다.

간단히하기 위해 파일 이름이 지정 file1.txt되고 로컬 파일 경로 = [local_path]가 있고 원점에서 filepath =가 있다고 가정 [remote-path]합니다.

입력해야하는 git 명령은 무엇입니까?

편집 : 귀하의 의견에 매우 감사합니다. Eclipse를 사용하는 사람들 (이전에 언급 했어야 함)의 경우 마우스 오른쪽 버튼을 클릭하고-> 비교-> 분기, 태그 또는 참조-> 적절한 버전을 선택하면됩니다.


[원격 경로]는 [로컬 경로]와 다른가요?
코드 견습생

방금 편집 내용을 확인했습니다. 답변으로 자유롭게 게시하십시오.
코드 견습생

"원산지 주인"이란 무엇입니까?

일식
egit

답변:


250

경우 [remote-path][local-path]같은, 당신은 할 수있다

$ git fetch origin master
$ git diff origin/master -- [local-path]

참고 1 : 위의 두 번째 명령은 로컬에 저장된 원격 추적 분기와 비교합니다. 페치 명령은 원격 서버의 컨텐츠와 동기화되도록 원격 추적 분기를 업데이트해야합니다. 또는, 당신은 그냥 할 수 있습니다

$ git diff master:<path-or-file-name>

참고 2 : master 위의 예에서 분기 이름으로 바꿀 수 있습니다 .


15
현재 디렉토리 인 경우 로컬 경로를 생략 할 수도 있습니다.
Tony Wall

19
나와 같은 극도로 멍청한 사람들을위한 예는 다음과 같습니다.git diff master:README.md -- README.md
fabriciorissetto

24
실제로 여기에 더 좋은 예가 있습니다.git diff origin/master -- README.md
JDiMatteo

git fetch master대신 대신 사용할 수 없었습니다 git fetch .(원산지 / 마스터도 작동하지 않았습니다).하지만 나머지는 잘 작동했습니다.
rob

1
@rob 당신은 내 실수를 지적한 첫 번째 사람입니다. 이어야합니다 git fetch **origin**.
Code-Apprentice

114

원격 파일에서 로컬 파일로가는 차이점을 보려면

git diff remotename/branchname:remote/path/file1.txt local/path/file1.txt

다른 방향의 차이점을 보려면

git diff HEAD:local/path/file1.txt remotename/branchname:remote/path/file1.txt

기본적 으로이 표기법을 사용하여 어디서나 두 파일을 비교할 수 있습니다.

git diff ref1:path/to/file1 ref2:path/to/file2

평소 ref1와 같이 ref2지점 이름, 원격 이름 / 지점 이름, 커밋 SHA 등이 될 수 있습니다.


17

로컬 저장소와 원격 저장소를 비교하려면 아래 구문을 사용하십시오.

git diff @{upstream}

2

이를 위해 bash 스크립트를 작성했습니다.

#set -x 
branchname=`git branch | grep -F '*' |  awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | awk '{if ($1 == "modified:") print $2;}'`
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file 
git difftool  FETCH_HEAD $file ;
done

위의 스크립트에서 나는 원격 메인 브랜치 (마스터 브랜치 ANY 브랜치가 아닌)를 FETCH_HEAD에 가져온 다음 수정 된 파일의 목록 만 만들고 수정 된 파일을git difftool .

difftoolgit 은 많은 Meld Diff ViewerGUI를 지원합니다 . GUI를 잘 비교 하도록 설정 했습니다.
위 스크립트에서 git 단계 untrack-->staged-->commit를 수행하기 전에 원격 팀과의 불필요한 병합 병합 충돌을 피하거나 새로운 로컬 지점을 만들고 주요 지점에서 비교하고 병합하는 데 도움이되는 git 단계 를 수행하기 전에 동일한 파일에서 다른 팀이 수행 한 변경 사항에 대해 사전 지식이 있습니다.


1

몇 가지 솔루션을 시도했지만 다음과 같은 쉬운 방법이 있습니다 (로컬 폴더에 있음).

#!/bin/bash
git fetch

var_local=`cat .git/refs/heads/master`
var_remote=`git log origin/master -1 | head -n1 | cut -d" " -f2`

if [ "$var_remote" = "$var_local" ]; then
    echo "Strings are equal." #1
else
    echo "Strings are not equal." #0 if you want
fi

그런 다음 로컬 자식과 원격 자식 마지막 커밋 번호를 비교했습니다 ....


0

로컬 및 원격에서 가능한 다른 경로에 대해 이야기 한 원래 질문에 대한 전체 답변은 다음과 같습니다.

  1. git fetch origin
  2. git diff master -- [local-path] origin/master -- [remote-path]

로컬 경로가 docs / file1.txt이고 원격 경로가 docs2 / file1.txt라고 가정하면 git diff master -- docs/file1.txt origin/master -- docs2/file1.txt

이것은 여기 GitHub 도움말 페이지 와 코드 견습생 답변에서 수정되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.