複製されたリモートリポジトリと元のリモートリポジトリのgit diff


170

githubリポジトリのクローンを作成し、ローカルで変更を加えていません。Githubリポジトリは、同じブランチのコミットで前進しました。

  1. ローカルリポジトリと元のgithubリポジトリの差分を見つけるにはどうすればよいですか?
  2. 作業コピーと元のgithubリポジトリの違いを見つけるにはどうすればよいですか?
  3. ローカルリポジトリと同じプロジェクトの別のgithubリポジトリの違いを見つけるにはどうすればよいですか?


1
@CiroSantilli新疆改造中心六四事件法轮功:それは十分に異なると思います:他の質問は一般的なリモートブランチについて尋ねますが、これはGitHubに関するものであり、さらに3つの異なる出発点について尋ねます。それらは間違いなく似ているので、あなたのリンクは確かに役に立ちます。
jvriesem 2018

回答:


161

1)比較するリモートリポジトリを追加します。

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

2)リモートのローカルコピーを更新します。

git fetch foobar

Fetchは作業コピーを変更しません。

3)ローカルリポジトリのブランチを、追加したリモートと比較します。

git diff master foobar/master

diffの前にgit fetchが必要ですか?それなしで差分を取る方法はないと思います。
Oleg Proudnikov 2011年

これは実際には質問3のみに対する回答です(別のgithubリポジトリとの違い)。
Ruslan Kabalin

5
「元のgithubリポジトリ」を他のリモートリポジトリと区別するものはありません。それとも私は何かを誤解していますか?
dbyrne

git 2.7.4で試したところ、「git diff master foobar / master」に違いがありませんでした。ローカルコピー(「マスター」)を第1引数(「マスター」)として指定されたレポと比較し、「パス/ファイル」「foobar /マスター」のみを比較するように見えます。しかし、「diff foobar / master」というコマンドがうまくいき、ローカルマスターをfoobar / masterと比較しました。
user2081279 16

代わりにfetch(nr。2)の代わりに:git remote update- すべてのブランチセットを更新して、リモートブランチを追跡しますが、変更をマージしません。またはgit pull
Timo

49

あなたの質問への別の返答(マスターにいて、リモートの変更についてリポジトリに認識させるためにすでに「git fetch origin」を実行していると仮定します):

1)ローカルブランチが作成されたときからのリモートブランチでのコミット:

git diff HEAD...origin/master

2)「作業コピー」とは、まだリモートになっていないローカルコミットがあるローカルブランチを意味していると思います。ローカルブランチにあるものの、リモートブランチにはない違いを確認するには、次のコマンドを実行します。

git diff origin/master...HEAD

3)dbyrneによる回答を参照してください。


HEAD..origin/master構文をありがとう!origin / HEADが存在しないというエラーが発生しましたが、これで解決しました。
Dan Bechard、2015年

@ruslan:git diff HEAD...origin/master変更を許可されているリモートディレクトリを複製した場合、何も返さないというのはどういう意味ですか?
Mona Jalal

Windows GUIを使用してクローンを作成しているときにエラーが発生したため、クローンが完全に処理されたかどうかを確認します。フォルダーがディレクトリにあるのがわかりますが、リモートと同じであることを確認したいと思います。ただし、git shellでは、git diffは何も返しません。クローンが成功したかどうか混乱していますか?
Mona Jalal 2016

@MonaJalalは、クローンを作成してからのアップストリームの変更がないことを意味します。
Ruslan Kabalin 16

21

この例は誰かを助けるかもしれません:

注「origin」は、リモート「What is on Github」のエイリアスです
注「mybranch」は、githubと同期しているブランチ「what is local」のエイリアスです-
作成しなかった場合、ブランチ名は「master」です。 1。ただし、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

ローカルで一部を変更します。ファイル./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)

これをリモートと比較する-あなたのフォーク:(これはで頻繁に行われます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」を実行して、リモートのローカルコピーが最新であることを確認する必要があると思います。
ドン

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.