我希望找到本地存储库中的文件与源主存储库中的文件之间的差异。

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

为了简单起见,我们假设文件名为file1.txt,它有一个本地文件路径= [local_path],在源文件中它有filepath = [remote-path]。

我需要输入什么Git命令?


对于那些正在使用Eclipse的人,我发现只需右键单击→比较→分支、标签或引用→选择适当的版本,就可以了。


当前回答

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

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

通常,ref1和ref2可以是分支名、remotename/branchname、提交sha等等。

其他回答

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

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

通常,ref1和ref2可以是分支名、remotename/branchname、提交sha等等。

我尝试了一些解决方案,但我认为一个简单的方法是这样的(你在本地文件夹):

#!/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的比较。

如果[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可以被替换为任何分支名称

为此,我写了一个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,我配置了Meld Diff Viewer,以便更好地进行GUI比较。

从上面的脚本中,在我遵循Git阶段untracked→staging→commit之前,我已经预先了解了其他团队在同一个文件中所做的更改,这有助于我避免与远程团队不必要的解决合并冲突或创建新的本地分支并在主分支上进行比较和合并。

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

Git获取来源 Git diff master——[local-path]——[remote-path]

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

这是改编自这里的GitHub帮助页面和之前的代码学徒的答案。