ローカルgitブランチをリモートブランチと比較するにはどうすればよいですか?


1052

diffローカルブランチとリモートブランチの間をどのように確認できますか?


5
この質問は後でもう一度尋ねられました。それは素敵な答えを持っています stackoverflow.com/questions/11935633/...
rustybeanstalk

3
例:git diff master origin / master(masterはローカルマスターブランチで、origin / masterはリモートマスターブランチです)
Dung

@klyngbaek、この回答は特に;-)

私が最初に試みgit diff HEAD origin/HEADたのは、私が意図したものとは異なるリモートブランチを指すようです。完全なブランチ名を使用すると、期待どおりに機能します。
Deanna

回答:


594

リモート追跡ブランチを更新するには、git fetch最初に入力してから次のように入力する必要があります。

git diff <masterbranch_path> <remotebranch_path>

あなたができるgit branch -aし、リストから支店名を選択します(ローカルおよびリモート)全ての枝を一覧表示する(だけの削除remotes/リモートブランチ名から。

例:(git diff master origin/master「master」はローカルマスターブランチで、「origin / master」はリモート、つまりオリジンとマスターブランチです。)


23
彼は(git fetch)の前にフェッチが必要な場合があります
Houssem Badri

それは単にbashの変更の一部を示していますが、VSコードのようなIDEですべての変更を開く方法はありますか?
過酷なPhoujdar

@Harsh Phoujdar .git / .gitconfigファイルに以下のコードを追加しますcode.exeファイル [diff] tool = vscode [difftool] prompt = false [difftool "vscode"] cmd = \"C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe\" \"$LOCAL\" \"$REMOTE\" --diff --wait trustExitCode = falseへのパスが正しいことを確認してください。
アマン

1307
git diff <local branch> <remote>/<remote branch>

たとえばgit diff master origin/master、またはgit diff featureA origin/next

もちろんするいると述べたリモート追跡ブランチあなたに必要なgit fetch最初の。また、リモートリポジトリのブランチに関する最新情報を入手する必要があります。


98
より正確には:git diff <ローカルブランチ> <リモート> / <リモートブランチ>
nalply

38
私は通常git diff <remote>/<remote branch> <local branch>、自分のプッシュがリモートリポジトリに何を行うかを確認するために行います。
のMichałTatarynowicz

76
git diff origin上流のブランチと比較する場合は、さらに短くても十分です。
ラダー2014

12
git fetch最初に追加してください、それは私のような初心者に問題を引き起こします
Saif

1
ねえ、そうじゃないのgit diff <remote>/<remote branch> <local branch>?そうでなければ、私が得る追加と削除は自分のコンピュータ(gitのバージョン2.7.0.windows.2)に切り替える
マルティン・コル

183

最初のタイプ

git branch -a

利用可能なブランチのリストを取得します。出力では、次のようなものが表示される場合があります

* master
  remotes/main/master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mt
  remotes/upstream/master
  remotes/upstream/mt

次に、差分を表示します

git diff --stat --color remotes/main/master..origin/master
git diff remotes/main/master..origin/master

1
それはそう...ではあり..ませんか?
Eliran Malka

9
私は間違いなくこれを答えに選んだでしょう。あなたの指示に従って、私はローカルブランチとリモートブランチの違いを見ることができました。ありがとう!
Tass

1
私は通常ないgit log origin/my_branch..がかかりますどのHEADあなたが何を意味するか、主にローカル参照、と。
Rudie 2013年

4
質素な意見でベストアンサーの+1。クローンされたソースの「リモート」イメージを同期するために「フェッチ」について言及した場合、+ 2の価値があります。統計/色の概要ステップは特に役立ちます。
bvj

3
1つの答えてくれてありがとうは、最終的には少し以上の結果7または8「答え」を働いたということfatal: bad revisionfatal: ambiguous argument。私が欲しかったのは、別のブランチからの同じファイルの差分を表示することだけでした。はい、そうでした。:-) git diff remotes/origin/<base branch> <current branch> -- <filename>git 1.8.3.1で動作します
Steve Bonds

144

特定のブランチにいて、追跡している上流のブランチと比較したい場合は、

git diff @{upstream}

アップストリームが設定されていない場合(通常はArijoonのコメントに感謝)

git diff @{push}

この回答のおかげで、リビジョン指定するためのgitドキュメントは次のとおりです。

<branchname>@{upstream}例えばmaster@{upstream}@{u}
サフィックス @{upstream}branchname(短い形式には<branchname>@{u})で指定されたブランチがそのブランチを指すbranchname(と構成の上に構築さに設定されているbranch.<name>.remotebranch.<name>.merge)。欠落しているbranchnameデフォルトは現在のものになります。


10
ほんの少し欠けている非常に良い答え。行をに変更しgit diff @ @{upstream}ます。追加@HEADであり、これが現在の場所なのでHEAD、ブランチが追跡しているアップストリームと比較しています。@{push}アップストリームの代わりに使用して、プッシュするように設定されているブランチ間の差分を取得できます
Arijoon

3
ベストアンサー。リモートをフェッチする必要はありません。もっと賛成投票が必要です!
jcomeau_ictx 2017年

3
魚の殻で私は結果を得ました:fatal: ambiguous argument '@upstream': unknown revision or path not in the working treegit diff @\{upstream\}代わりに使用する必要がありました。😥–
ランドンクーン

git fetch最初に行う必要があります。そうしないと、何も実行されず、出力が表示されません。リポジトリの起点にあるファイルを削除してテストし、このコマンドをローカルで実行しました。..フェッチ後にのみ機能します。

また、与えられた答えには、ローカルの変更が含まれています。これが望ましい場合もあれば、そうでない場合もあります。
Deanna

44

私は次の出力をはるかによく理解しています:

git diff <remote-tracking branch> <local branch>

これにより、ローカルブランチをプッシュした場合に何がドロップされ、何が追加されるかがわかります。もちろん同じですが、逆ですが、私にとってはより読みやすく、何が起こるかをより快適に見ることができます。


まったく同じ結果が得られます:git diff <ローカルブランチ> <リモートトラッキングブランチ>またはgit diff <リモートトラッキングブランチ> <ローカルブランチ>
user2928048

32

簡単な方法:

git fetch
git log -p HEAD..FETCH_HEAD

これにより、最初にデフォルトのリモート(起点)から変更がフェッチされます。これは、リポジトリのクローンを作成すると自動的に作成されます。明示的にすることもできますgit fetch origin master

次に、git logを使用して、現在のブランチとフェッチしたブランチを比較します。(-p(パッチの生成)オプションは、違いを示すものです。)


14

これが私のやり方です。

#To update your local.
git fetch --all

これはリモートからすべてをフェッチするので、違いを確認すると、違いがリモートブランチと比較されます。

#to list all branches
git branch -a

上記のコマンドはすべてのブランチを表示します。

#to go to the branch you want to check difference
git checkout <branch_name>
#to check on which branch you are in, use
git branch
    (or)
git status

これで、次のように違いを確認できます。

git diff origin/<branch_name>

これはローカルブランチとリモートブランチを比較します


2
git fetch --allは、すべてのリモートからすべてをフェッチします。デフォルトのオリジンリモートを使用する場合は、git fetchで十分です。
クリストフケラー2017年

8年後には、手順を適切に説明する完全な回答が得られます。--helpを実行してコマンドを取得できます。SOはそれらを理解することです。
gdbj 2017

11

作業ブランチが開発であり、ローカル開発ブランチとリモート開発ブランチを区別したい場合、構文は次のようにするgit diff remotes/origin/development..development
か、

git fetch origin git diff origin/development


11

tl; drgit diff <local branch> <remote branch>

シェルでgitを使用するときは、まず周りを見回して自分の向きを変えたいと思います。ここにすべてのブランチ表示するコマンドがあります

$ git branch -a  # (or git branch --all) 
* my-branch
  master
  remotes/origin/some-branch
  remotes/origin/HEAD -> origin/master
  remotes/origin/my-branch
  remotes/origin/some-other-branch
  remotes/origin/master

ここで私は2つのローカル支店(持っているmy-branchmasterリモート)と4を(some-branchsome-other-branchmaster、およびmy-branch)。

また、横のアスタリスクmy-branchは、私が現在そのブランチにいることを示しています(git status出力するコマンドを使用することによってもわかります:)On branch my-branch.

注:git bashシェルのリモートブランチは赤で表示され、ローカルブランチは緑で表示されます。

リモートブランチ表示したいだけの場合:

$ git branch -r # (or git branch --remotes)
  origin/some-branch
  origin/HEAD -> origin/master
  origin/my-branch
  origin/some-other-branch
  origin/master

ローカルブランチだけを表示する場合git branch -l、使いたくなるかもしれませんが、それは完全に異なるコマンドです。ローカルブランチ表示するにgit branchは、オプションなしで使用します

$ git branch
* my-branch 
  master

基本的なブランチオプションの確認を完了するには、フィルタリング--listを許可するために、期待に反するものがあります。次のようなパターンで使用します。

$ git branch --list 'my*'
* my-branch

--listオプション-aと組み合わせることもできますが、-rそれに応じて必ずパターンを調整してください(リモートブランチは「リモート」で始まることに注意してください)。例:

# this will show all branches (local & remote) that start with my
$ git branch --list 'my*' -a
* my-branch

# better: the pattern includes the remote
$ git branch --list '*my*' -a
* my-branch
  remotes/origin/my-branch

ドキュメント:https : //git-scm.com/docs/git-branch

これで、使用可能なすべてのブランチから任意の2つのブランチ比較できます(2つのローカルまたは2つのリモートを比較することもできます)。

ここでは、ローカルとリモートを比較してmy-branchいます。これらは同期されているので、出力はありません。

$ git diff my-branch remotes/origin/my-branch

注:引用符なしでブランチの完全な名前を指定する必要があります。

ローカルmy-branchとリモートを比較することもできmasterます。リモートmy-branchがマスターブランチにマージされていないため、ここに出力が表示されます。

$ git diff my-branch remotes/origin/master
diff --git a/src/controllers/call.controller.js b/src/controllers/call.controller.js
index fd79b98..df3d798 100644
--- a/src/controllers/call.controller.js
+++ b/src/controllers/call.controller.js
@@ -261,7 +261,7 @@ function callController() {
   /*
    *  Function: doCall
[ . . . ]

11

あなたが使用し、その後変更されたファイルの名前だけとの違いを確認したい場合は、次の

git diff --name-status <remote-branch> <local-branch>

他にこれは二つの枝の間のすべての違いを示します:

git diff <remote-branch> <local-branch>


9

現在のブランチと比較したいものと比較する場合の簡単な答えは次のとおりですgit pull

git fetch
git diff FETCH_HEAD

最初のコマンドは、現在のブランチに対応するリモートブランチを特定します。FETCH_HEAD参照におけるその計算のアーティファクト。次に、2番目のコマンドはその参照比較と現在のブランチの比較を使用します。


6

私はすでにこの質問に対するいくつかの回答があることを知っていますが、それらのほとんどを試すときに奇妙なエラーが発生しました。

私の場合、私はと呼ばれる第2の遠隔持ちherokuないoriginし、それが同期していなかったので、実行しようとしたとき、私はこのエラーを得たがgit diff master heroku/master

fatal: ambiguous argument 'heroku/master': unknown revision or path not in the working tree.

または、これは他のアプローチを試みる場合git diff master..heroku/master

fatal: bad revision 'master..heroku/master'

解決策は、私の場合、git fetch実行する前にリモート名を明示的に言及していましたgit diff

$ git fetch heroku
$ git diff master heroku/master

この同じ問題で他の人を助けることを願っています。


4
git difftool <commit> .

これにより、必要なコミットがローカルファイルと比較されます。最後にドットを忘れないでください(ローカルの場合)。

たとえば、ローカルファイルをいくつかのコミットと比較するには:

git difftool 1db1ef2490733c1877ad0fb5e8536d2935566341。

(そして、新しいコミットとの比較が必要でない限り、git fetchは必要ありません)


コミットとプッシュの前に比較できるので、これは興味深いと思います。残念ながら、ウィンドウではvimdiffを表示するのは醜いです。notepad ++のようなより良いものを使用する方法はありますか?
Stefano Scarpanti 2017

3

git diff 'master' 'testlocalBranch'

webstormのようなエディターを使用している場合は、ファイル選択を右クリックしてブランチと比較し、ブランチを入力/選択できます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


2
これは7.5以上の賛成票で170以上の賛成投票で何を追加しますか?
Mark Rotteveel

これは、mrblahユーザー、または承認された回答にコメントを追加した同様のユーザー向けです。構文は例とは異なり、例は初心者の観点からより役立ちます。
クルクラ

2
その場合、それはその答えのコメントにあるべきです。
ラチット2017

1

VS 2019では、FETCH Do not pull pull codeを実行します。

これは私がやったことです。Beyond Compareを使用できるように、.gitconfigファイルに以下を追加しました

File location: C:\Users\[username]\.gitconfig

以下に追加

[diff]
    tool = bc
[difftool "bc"]
    path = c:/Program Files/Beyond Compare 4/bcomp.exe

コマンドプロンプトを開き、作業ディレクトリに移動します。ローカルDEVブランチとリモートDEVブランチを比較するために以下に与えました

git difftool dev origin/dev --dir-diff

これにより、Beyond Compareが開き、ファイルが異なるディレクトリが開きます。変更がない場合、Beyond Compareは起動しません。


0

私のマスターブランチに変更はありますか...

  1. まず、ブランチを変更する必要があります(すでにこのブランチの下にいる場合は、これを行う必要はありません!)

gitチェックアウトマスター

  1. このコマンドにより、masterブランチの下で変更されたファイルを確認できます

gitステータス

  1. ブランチを一覧表示する

gitブランチ-a

  • マスター
    リモコン/オリジン/マスター
  1. 違いを見つける

git diff origin / master


0

セットアップ

git config alias.udiff 'diff @{u}'

HEAD @ {upstream}とHEADの比較

git fetch  # Do this if you want to compare with the network state of upstream; if the current local state is enough, you can skip this
git udiff

任意のリモートブランチとの差分

これで、見出しの質問に答えます(「そのリモート」)。「リモート」(ブランチのアップストリームとして構成されていない)と比較したい場合は、直接ターゲットにする必要があります。次のコマンドを使用すると、すべてのリモートブランチを表示できます。

git branch -r

次のように構成されたすべてのリモートを表示できます。

git remote show

次のように、単一のリモート(例:オリジン)のブランチ/トラッキング構成を確認できます。

git remote show origin

適切なoriginブランチを決定したら、通常のdiffを実行します:)

git diff [MY_LOCAL] MY_REMOTE_BRANCH


0

これは非常に簡単です。以下を使用できます。git diff remote/my_topic_branch my_topic_branch

my_topic_branchあなたのトピックブランチはどこですか。


0

あなたがすでにoriginリモートリポジトリとして設定しているとしましょう。そして、

git diff <local branch> <origin>/<remote branch name>


0

試してください:

git diff origin HEAD

現在のローカルブランチをHEADオリジンと比較したいと仮定します。そして、あなたがローカルブランチにいると仮定します。:)


-3

TortoiseGit(GitのGUIを提供します)を使用している場合は、Gitリポジトリフォルダーを右クリックしてをクリックしますGit Sync

選択されていない場合は、比較するブランチを選択できます。コミットコミットの違いを見ることができます。コミットを右クリックして、Compare with previous revision違いを並べて表示することもできます。リモートとローカルのブランチを比較するための亀のgit同期

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.