복제 된 원본 저장소와 원본 원격 저장소 간 git diff


170

github 저장소를 복제했으며 로컬로 변경하지 않았습니다. Github 리포지토리는 동일한 브랜치에서 커밋을 진행했습니다.

  1. 로컬 저장소와 원래 github 저장소 사이의 차이점을 어떻게 찾을 수 있습니까?
  2. 작업 사본과 원래 github 저장소 사이의 차이점을 어떻게 찾을 수 있습니까?
  3. 로컬 저장소와 동일한 프로젝트의 다른 github 저장소 사이의 차이점을 어떻게 찾을 수 있습니까?


1
@CiroSantilli 新疆 改造 中心 六四 事件 法轮功 : 나는 그것이 충분히 다르다고 생각합니다. 다른 질문은 일반적인 원격 브랜치에 대해 묻는 반면, 이것은 GitHub와 관련이 있으며 세 가지 다른 시작점을 묻습니다. 그것들은 확실히 비슷하기 때문에 귀하의 링크는 확실히 유용합니다.
jvriesem

답변:


161

1) 비교하려는 원격 저장소를 추가하십시오.

git remote add foobar git://github.com/user/foobar.git

2) 리모컨의 로컬 사본을 업데이트하십시오.

git fetch foobar

가져 오기는 작업 사본을 변경하지 않습니다.

3) 로컬 리포지토리의 분기를 추가 한 원격지와 비교하십시오.

git diff master foobar/master

diff 전에 git fetch가 필요합니까? 그것 없이는 diff 할 수있는 방법이 없다고 생각합니다.
Oleg Proudnikov

이것은 실제로 질문 3에 대한 답변입니다 (다른 github 저장소와 다릅니다).
Ruslan Kabalin

5
"원래 github 저장소"와 다른 원격 저장소를 구별하는 것은 없습니다. 아니면 뭔가 오해하고 있습니까?
dbyrne

git 2.7.4로 시도했을 때 "git diff master foobar / master"는 차이를 보이지 않았습니다. 내 로컬 사본 ( "master")을 첫 번째 인수 ( "master")로 제공된 저장소와 비교하고 거기에 "path / file" "foobar / master"만 다릅니다. 그러나 "diff foobar / master"명령은 로컬 마스터를 foobar / master와 비교하여 저에게 효과적이었습니다.
user2081279

fetch대안 으로 (2 번) 대신 : git remote update- 원격 지점을 추적하도록 설정된 모든 지점을 업데이트 하지만 변경 사항을 병합하지는 않습니다. 또는git pull
Timo

49

귀하의 질문에 대한 또 다른 답변 (당신이 마스터에 있고 이미 원격 변경에 대해 repo를 알리기 위해 "git fetch origin"을 가정 한 경우) :

1) 로컬 브랜치가 생성 된 이후 원격 브랜치에서 커밋 :

git diff HEAD...origin/master

2) "Working copy"는 아직 원격에 있지 않은 로컬 커밋이있는 로컬 지점을 의미한다고 가정합니다. 로컬 지점에 있지만 원격 지점에 존재하지 않는 차이점을 보려면 다음을 수행하십시오.

git diff origin/master...HEAD

3) dbyrne 의 답변 을 참조하십시오 .


HEAD..origin/master구문 감사 합니다! 기존 / HEAD가 존재하지 않는 오류가 발생하여 해결되었습니다.
Dan Bechard

@ruslan : git diff HEAD...origin/master변경 권한이있는 원격 디렉토리를 복제 한 경우 아무것도 반환하지 않으면 무엇을 의미 합니까?
Mona Jalal

Windows GUI를 사용하여 복제 할 때 오류가 발생하여 복제가 완전히 완료되었는지 궁금합니다. 폴더가 내 디렉토리에 있지만 원격 폴더와 동일한 지 확인하고 싶습니다. 그러나 git shell에서 git diff는 아무것도 반환하지 않습니다. 클론이 성공적 이었는지 혼란 스러울까요?
Mona Jalal

@MonaJalal 복제 한 이후 업스트림 변경이 없음을 의미합니다.
Ruslan Kabalin

21

이 예제는 누군가를 도울 수 있습니다.

참고 " originGithub에서"가 뭔지 "원격 내 별명은"
주 " mybranch"나는 GitHub의와 동기화하고있어 것을 "지역 무엇인지"내 지점 내 별명입니다
당신이 작성하지 않은 경우 - 당신의 지점 이름하여 '마스터'입니다 하나. 그러나 mybranch지점 이름 매개 변수가 사용되는 위치를 표시하기 위해 다른 이름 을 사용하고 있습니다.


github의 원격 저장소는 정확히 무엇입니까?

$ git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)

"같은 코드의 다른 github 저장소"를 추가하십시오 – 우리는 이것을 포크라고 부릅니다 :

$ git remote add someOtherRepo https://github.com/otherUser/Playground.git

$git remote -v
origin  https://github.com/flipmcf/Playground.git (fetch)
origin  https://github.com/flipmcf/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (push)
someOtherRepo https://github.com/otherUser/Playground.git (fetch)

지역 리포지토리가 최신인지 확인하십시오.

$ git fetch

로컬로 일부 내용을 변경하십시오. file ./foo/bar.py라고합시다

$ git status
# On branch mybranch
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   foo/bar.py

커밋되지 않은 변경 사항 검토

$ git diff mybranch
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index b4fb1be..516323b 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

로컬로 커밋합니다.

$ git commit foo/bar.py -m"I changed stuff"
[myfork 9f31ff7] I changed stuff
1 files changed, 2 insertions(+), 1 deletions(-)

이제는 리모컨과 다릅니다 (github)

$ git status
# On branch mybranch
# Your branch is ahead of 'origin/mybranch' by 1 commit.
#
nothing to commit (working directory clean)

DIFF이 원격으로 - 포크 : (이 자주 이루어집니다 git diff master origin)

$ git diff mybranch origin
diff --git a/playground/foo/bar.py b/playground/foo/bar.py
index 516323b..b4fb1be 100655
--- a/playground/foo/bar.py
+++ b/playground/foo/bar.py
@@ -1,27 +1,29 @@
- This line is wrong
+ This line is fixed now - yea!
+ And I added this line too.

(git push를 원격에 적용하려면)

원격 지점과 원격 마스터 지점의 차이점은 무엇입니까?

$ git diff origin/mybranch origin/master

내 로컬 내용이 원격 마스터 브랜치와 어떻게 다릅니 까?

$ git diff origin/master

내 물건은 다른 사람의 포크와 같은 레포의 마스터 지점과 어떻게 다릅니 까?

$git diff mybranch someOtherRepo/master

5
'git diff'를 수행하기 전에 로컬 로컬 사본이 최신인지 확인하려면 'git fetch'를 수행해야한다고 생각합니다.
Don

1
원격 및 로컬을 비교하는 방법에 대한 20 개의 게시물을 읽었습니다. 방금 직접 알아 냈습니다 : git fetch가 먼저 필요합니다. git은 실제로 RCS의 어셈블리 코드입니다. 예수. 확인해 주셔서 감사합니다, 돈!
Terence Parr

git fetch이 답변에 추가되었습니다 .
FlipMcF

1
흠 ... 나는 'myfork'를 내 지사 이름으로 사용하는 것을 좋아하지 않습니다. 즉 (그냥이 답변을 돌아온 나 같은) 사람을 혼란스럽게 할 수
FlipMcF

편집-명확성 및 '포크 차이'질문 # 3에 응답
FlipMcF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.