ローカルのコミットされていない変更とオリジンを比較する方法


141

リポジトリを複製してファイルの変更を始めたとしましょう。ローカルのコミットされていない変更がある場合は、次のようにdiffを実行できます。git diff test.txtこれにより、現在のローカルのHEADと、ファイル内の変更されたコミットされていない変更の違いが表示されます。これらの変更をコミットする場合は、次のコマンドを使用して、元のリポジトリと比較できます。git diff master origin/master

しかし、ローカルでコミットするに、サーバー上の元のリポジトリとローカルの変更を比較する方法はありますか?git diff --cached master origin/master運が悪いので色々な順列を試してみました。


ローカルで最後にコミットされたバージョンからファイルがどれだけ変更されたかを知りたいと思いました。私の質問に対する答えはこの質問でした。ありがとう!
Souvik Ghosh 2017

回答:


133

リモートリポジトリがキャッシュされていることを考えると、git fetchこれらのコミットと比較できるはずです。以下を試してください:

$ git fetch origin
$ git diff origin/master

5
ああ、すばらしい。鍵はマスターを除外することでした。私は以前にフェッチを行っていた組み合わせを試しましたが、それを行ったときgit diff master origin/masterはまだコミットされたバージョンと比較していました(振り返ってみると明らかです)。しかし、マスターを除外すると、ローカルの変更がフェッチされたバージョンと比較されます。
Chaitanya 2013

@Chaitanyaよかった。実際、私はGitが使用するさまざまなスタイルを少し苛立たせorigin masterていますorigin/master。やるべきことはまだあります。
JJD 2013

:これは動作していないようgit diff origin/masterに戻りfatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.、例えばかかわらず、マスターが原点に存在するgit fetch origin master、罰金に動作します
mikemaccana

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

(ファイル名を2回入力する必要がない方法については、Eric Boehsに感謝します)


上記の狭い特定のソリューションよりも一般的なソリューションの方が好きです。あなたがそれを見つけた場所での心の共有?
fbicknel 2015

commit-ishコロン区切りの詳細に関するドキュメントが見つからないようです。git-diffのドキュメントはそれについて言及していないようです。長い間使っていたので、どこで見つけたのか覚えていません。おそらく、他のコマンドに関する他の人々の例で、私はで実験しましたgit-diff。私は怖いの別の答えはcommit-ish、私は、現時点では思い付くことができる最高です。
2015

3
これに素敵な追加がありgit diff master:./ -- README.mdます。そうすれば、README.md2回入力する必要がなく、エイリアスに簡単に追加できます。
Eric Boehs 2015年

@EricBoehsに感謝します、それは素晴らしい提案です。
2015年

1
この構文ではなく...私のために働いていません作成したソースではなく、リモートブランチを。gitバージョン2.19.0を使用git diff master: -- README.md.//dev/null
rustyDev

21

既存のファイルに対するステージングされていない(追加されていない)変更を確認するには

git diff

これは新しいファイルを追跡しないことに注意してください。段階的でコミットされていない変更を確認するには

git diff --cached


9

ファイルを視覚的に比較したい場合は、以下を使用できます。

git difftool

変更されたファイルごとに、diffアプリを自動的に起動します。

PS:差分アプリを設定しなかった場合は、以下の例のように設定できます(私は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 2017年

私は好奇心旺盛ですが、これは質問とどのように関連していますか?git difftoolはローカルの変更をマスターと比較するだけではありませんか?ただし、OPはローカル変更とリモートマスターの間にそれを要求します。
-infoclogged

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