2014-01-13 64 views
114

我想找到我在本地回购中的文件与原始主文件中的文件之间的差异。git:在本地回购和源文件之间的差异

我知道有git diff,但我只是想将它隔离到这个特定的文件。

为了简单起见,可以说文件名为file1.txt,它有一个本地文件路径= [local_path],并且在原点它有filepath = [remote-path]。

什么是我需要输入的git命令?

编辑:谢谢大家的意见,它一直非常有见地。对于那些正在使用Eclipse的人(我和我应该早些说明),我只是发现你可以右键单击 - >比较 - >分支,标记或引用 - >选择合适的版本,然后你就可以开始了。

+0

[remote-path]与[local-path]有什么不同? –

+0

我刚刚注意到你的编辑。随意发布它作为答案。 –

回答

141

如果[remote-path][local-path]都是一样的,你可以做

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

注1:上面第二个命令会比较反对本地存储的远程跟踪分支。 fetch命令需要将远程跟踪分支更新为与远程服务器的内容同步。或者,你可以做

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

注2:master可以在上面的例子中的任何分支名

+10

如果这是当前目录,甚至可以省略本地路径。 –

+9

对于像我这样的非常喜欢的人,下面是一个例子:'git diff master:README.md - README。md' – fabriciorissetto

+8

其实,这里有一个更好的例子:'git diff origin/master - README.md' – JDiMatteo

86

要查看远程文件将本地文件的区别:

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 

基本上你可以diff的任意两个文件的任何地方使用此表示法:

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

像往常一样,ref1ref2可能是分公司的名称,远程名称/分支名称,提交的SHA等

2

对于被替换在上面的脚本写了一个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 

我获取远程主分支(不需要它的主分支ANY分支)到FETCH_HEAD他们只做我的修改文件的列表,并将修改后的文件与git difftool进行比较

这里有很多由git支持的difftool,我配置了'Meld Diff Viewer',以便进行良好的GUI比较。 从上面的脚本我有事先知道在同一个文件中的其他团队做了什么更改之前,我遵循git阶段untrack - > staged - > commit这有助于我避免不必要的解决与远程团队合并冲突或使新的本地分支和在主分支上进行比较和合并。

相关问题