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

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

但是在本地提交之前,是否有任何方法可以区分服务器上原始存储库的本地更改? 我尝试了各种各样的git diff --cached master origin/master排列,没有运气。

鉴于远程仓库已通过git fetch进行caching,应该可以与这些提交进行比较。 尝试以下操作:

 $ 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 

(感谢埃里克Boehs的方式不必input文件名两次)

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

git diff

请注意,这不会跟踪新文件。 看到上演,非承诺的变化

git diff --cached

如果您想以可视方式比较文件,可以使用:

 git difftool 

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

PS:如果你没有设置一个差异的应用程序,你可以像下面的例子(我使用Winmerge ):

 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