git:本地存储库中的文件与原始文件之间的差异


186

我想找到本地存储库中的文件与.repo中的文件之间的区别origin master

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

为了简单起见,假设文件被命名file1.txt,并且具有本地文件path =,[local_path]并且在原始位置具有filepath = [remote-path]

我需要输入什么git命令?

编辑:谢谢大家的投入,它非常有见地。对于那些正在使用Eclipse的人(我和我应该早先说过),我刚刚发现您可以右键单击->比较方式->分支,标记或参考->选择适当的版本,然后就可以了。


[远程路径]与[本地路径]是否不同?
Code-Apprentice

我刚刚注意到您的修改。随时发布它作为答案。
法学徒

你怎么称呼“原产地大师”?

ecegse egit方法很好
user1169587

Answers:


249

如果[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可以在上述示例中用任何分支名称替换


15
甚至可以省略本地路径(如果这是当前目录)。
Tony Wall

19
对于像我这样的极端菜鸟,请举一个例子:git diff master:README.md -- README.md
fabriciorissetto

23
实际上,这是一个更好的示例:git diff origin/master -- README.md
JDiMatteo '16

我不能git fetch master代替使用git fetch .(原件/主件也没有用),但其余的件工作良好。

1
@rob您是第一个指出我的错误的人。应该是git fetch **origin**
法学徒

114

要查看从远程文件到本地文件的差异:

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

基本上,您可以使用此表示法将任何两个文件进行比较:

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

difftoolgit支持许多功能,我将其配置Meld Diff Viewer为进行良好的GUI比较。
从上面的脚本中,我先了解了其他团队在同一文件中所做的更改,然后再执行git阶段untrack-->staged-->commit,这有助于避免与远程团队进行不必要的解决合并冲突或建立新的本地分支并在主分支上进行比较和合并。


1

我尝试了几种解决方案,但我想这样简单的方法(您在本地文件夹中):

#!/bin/bash
git fetch

var_local=`cat .git/refs/heads/master`
var_remote=`git log origin/master -1 | head -n1 | cut -d" " -f2`

if [ "$var_remote" = "$var_local" ]; then
    echo "Strings are equal." #1
else
    echo "Strings are not equal." #0 if you want
fi

然后您确实比较了本地git和远程git的最后提交编号...。


0

下面是关于原始问题的完整答案,该问题谈论的是本地和远程上可能的不同路径

  1. git fetch origin
  2. git diff master -- [local-path] origin/master -- [remote-path]

假设本地路径为docs / file1.txt,远程路径为docs2 / file1.txt,请使用 git diff master -- docs/file1.txt origin/master -- docs2/file1.txt

这是从GitHub帮助页面适应这里代码学徒回答以上

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.