假设我克隆了一个存储库并开始修改文件。我知道如果我有本地未提交的更改,我可以执行以下git diff test.txt
的差异,它将显示当前本地HEAD与文件中已修改的未提交更改之间的区别。如果我提交了这些更改,我可以使用git diff master origin/master
但在本地提交之前,是否有任何方法可以将服务器上的原始存储库与本地更改区分开来?我尝试了git diff --cached master origin/master
的各种排列,没有运气。
答案 0 :(得分:121)
鉴于远程存储库已通过git fetch
缓存,应该可以与这些提交进行比较。请尝试以下方法:
$ git fetch origin
$ git diff origin/master
答案 1 :(得分:33)
我知道这不是问题的答案,但是我发现这个问题想要在分支和本地未提交的文件中区分文件,我想我会分享
语法:
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提供了一种无需输入文件名两次的方法)
答案 2 :(得分:18)
查看对现有文件的非暂存(未添加)更改
C:\Users\Hella\AndroidStudioProjects\Z\app\src\main\res\values-v21\styles.xml
Error:(3, 5) No resource found that matches the given name: attr 'windowActionBar'.
Error:(3, 5) No resource found that matches the given name: attr 'windowNoTitle'.
C:\Users\Hella\AndroidStudioProjects\Z\app\src\main\res\values\styles.xml
Error:No resource found that matches the given name: attr 'windowActionBar'.
Error:No resource found that matches the given name: attr 'windowNoTitle'.
Error:(4, 5) No resource found that matches the given name: attr 'colorAccent'.
Error:(4, 5) No resource found that matches the given name: attr 'colorPrimary'.
Error:(4, 5) No resource found that matches the given name: attr 'colorPrimaryDark'.
C:\Users\Hella\AndroidStudioProjects\Z\app\build\intermediates\res\merged\debug\values\values.xml
Error:(11) Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.
Error:(17) Error retrieving parent for item: No resource found that matches the given name 'ThemeOverlay.AppCompat.Dark.ActionBar'.
Error:(22) Error retrieving parent for item: No resource found that matches the given name 'ThemeOverlay.AppCompat.Light'.
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\Hella\AppData\Local\Android\Sdk\build-tools\24.0.1\aapt.exe'' finished with non-zero exit value 1
请注意,这不会跟踪新文件。 要查看暂定的,未提交的更改
git diff
答案 3 :(得分:6)
如果您想直观地比较文件,可以使用:
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
答案 4 :(得分:0)
一般来说,下面的命令可以获取所有关于分支之间差异(当前分支与另一个分支)的详细信息,包括未提交的更改:
$ git diff origin/master
它与下面的命令不同,它会忽略未提交更改的差异:
$ git diff origin/master..develop
您可以添加一些选项来过滤差异:
$ git diff origin/master [--name-only] [--diff-filter=A] [<path>]
选项 '--diff-filter=A' 表示从 origin/master 分支中过滤掉添加的 文件。但是,如果您在此之前运行了 git rm,则必须首先将更改推送到 git stash 中,然后恢复 git repo 并稍后应用隐藏的更改。否则,它不会按预期显示正确的差异。
因此,使用状态选项 '--name-status' 查看差异会有所帮助。
$ git diff origin/master [--name-status]