git 本地存储库中的文件与源文件之间的差异

js4nwp54  于 2023-03-06  发布在  Git
关注(0)|答案(8)|浏览(224)

我想找出本地存储库中的文件与origin master中的文件之间的差异。
我知道有git diff,但是,我只想将它隔离到这个特定的文件中。
为简单起见,假设文件名为file1.txt,本地文件路径为[local_path],源文件路径为[remote-path]
我需要输入的Git命令是什么?
对于那些正在使用Eclipse的用户,我刚刚发现您只需右键单击→ Compare With → * 分支、Tag或Reference* →选择适当的版本即可。

nimxete2

nimxete21#

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

r1zk6ea1

r1zk6ea12#

要查看远程文件与本地文件之间的差异:

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等。

eblbsuwk

eblbsuwk3#

要比较本地存储库和远程存储库,只需使用以下语法:

git diff @{upstream}
syqv5f0l

syqv5f0l4#

为此,我写了一个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

在上面的脚本中,我将远程主分支(不一定是它的master分支- any 分支)提取到FETCH_HEAD,只列出我修改过的文件,并将修改过的文件与git difftool进行比较。
Git支持许多difftool,我配置了 Meld Diff Viewer 以进行良好的GUI比较。
从上面的脚本中,我在遵循Git stages untrackedstagedcommit 之前,已经预先知道了其他团队在同一个文件中做了哪些更改,这有助于我避免不必要的解决与远程团队的合并冲突,或者创建一个新的本地分支,并在主分支上进行比较和合并。

rwqw0loc

rwqw0loc5#

与当前分支核对:

git diff -- projects/components/some.component.ts ... origin
git diff -- projects/components/some.component.html ... origin

要与其他分支进行核对,可以说staging:

git diff -- projects/components/some.component.ts ... origin/staging
git diff -- projects/components/some.component.html ... origin/staging
apeeds0o

apeeds0o6#

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

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

gk7wooem

gk7wooem7#

下面是对原始问题的完整回答,该问题讨论了本地和远程上可能的不同路径:

  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帮助页面here和之前的 Code-Apprentice 答案。
qzlgjiam

qzlgjiam8#

对我来说,只使用不带分支的文件名即可:

git diff filename

相关问题