如何区分本地未提交更改和原始更改

假设我克隆了一个存储库并开始修改文件。我知道,如果我有本地未提交的更改,我可以做一个如下 git diff test.txt的差异,它将显示我之间的差异,当前本地 HEAD 和修改,未提交的更改文件。如果我提交这些更改,我可以使用 git diff master origin/master将其与原始存储库进行区分

但是有没有办法区分本地更改与服务器 之前上本地提交的原始存储库的区别呢?我尝试了各种排列的 git diff --cached master origin/master没有运气。

142603 次浏览

假设远程存储库已经通过 git fetch缓存,那么应该可以比较这些提交。试试以下方法:

$ git fetch origin
$ git diff origin/master

我知道这不是问题的确切答案,但我发现这个问题寻找差异的 文件在一个分支和本地未提交的文件,我想我会共享

句法:

git diff <commit-ish>:./ -- <path>

例子:

git diff origin/master:./ -- README.md
git diff HEAD^:./ -- README.md
git diff stash@{0}:./ -- README.md
git diff 1A2B3C4D:./ -- README.md

(感谢 Eric Boehs 提供了一种不必键入两次文件名的方法)

如果你想直观地比较文件,你可以使用:

git difftool

它会自动启动您的差异应用程序为每个更改的文件。

如果你没有设置一个 diff 应用程序,你可以像下面的例子一样做(我使用 温梅杰) :

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
git config --global mergetool.prompt false

查看对现有文件的非暂存(未添加)更改

git diff

注意,这不会跟踪新文件。 查看分阶段的、未提交的更改

git diff --cached

一般来说,下面的命令可以完成它,它获取关于分支之间的差异(当前分支与另一个分支)的所有细节,包括未提交的更改:

$ git diff origin/master

它不同于下面的命令,后者忽略了未提交更改的差异:

$ git diff origin/master..develop

你可以添加一些选项来过滤这些差异:

$ git diff origin/master [--name-only] [--diff-filter=A] [<path>]

选项“ —— diff-filter = A”意味着从原始/主分支过滤掉 补充文件。但是,如果在此之前运行过 走吧,则必须首先将更改推入 git 存储,然后恢复 git 回购并在以后应用存储的更改。否则,它不会像预期的那样显示适当的差异。

因此,使用状态选项 “——姓名状态”查看差异会有所帮助。

$ git diff origin/master [--name-status]