web-dev-qa-db-ja.com

git:ローカルリポジトリ内のファイルと元のファイルとの差分

私は自分のローカルレポジトリにあるファイルとOrigin masterにあるファイルの違いを見つけたいと思います。

私はgit diffがあることを知っています、しかし私はただそれをこの一つの特定のファイルに分離したいです。

簡単にするために、ファイルの名前はfile1.txtで、ローカルファイルパス= [local_path]を持ち、Originではファイルパス= [remote-path]を持ちます。

入力する必要があるgitコマンドは何ですか?

編集:ご意見をいただきありがとうございました。 Eclipseを使っている人たち(私は以前にも述べたはずですが)を右クリック - >比較 - >分岐、タグまたは参照 - >適切なバージョンを選択するだけでそこに行くことができます。

155
SeekingAlpha

[remote-path][local-path]が同じ場合は、

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

注1:上記の2番目のコマンドは、ローカルに保存されているリモートトラッキングブランチと比較します。 fetchコマンドは、リモート追跡ブランチを更新してリモートサーバーの内容と同期させるために必要です。あるいは、あなただけのことができます

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

注2:上記の例ではmasterを任意のブランチ名に置き換えることができます。

213
Code-Apprentice

リモートファイルからローカルファイルへの違いを表示するには

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

基本的に、この記法を使用して任意の2つのファイルをどこでもdiffすることができます。

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

いつものように、ref1ref2はブランチ名、リモートネーム/ブランチネーム、コミットSHAなどです。

99
janos

ローカルリポジトリとリモートリポジトリを比較するには、単純に以下の構文を使用します。

git diff @ {upstream}

9
Ratna Halder

そのために私は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

上記のスクリプトでは、リモートのメインブランチ(そのマスタブランチである必要はありません)をFETCH_HEADにフェッチしてから、変更したファイルのみのリストを作成し、変更したファイルをgit difftoolと比較します。

Gitでサポートされているdifftoolはたくさんありますが、私はGUIの比較を良くするためにMeld Diff Viewerを設定しました。
gitステージuntrack-->staged-->commitに従う前に、同じファイル内の他のチームによってどのような変更が行われたのかを事前に知っています。メインブランチ.

2
adg