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

时间:2013-07-16 23:21:20

标签: git git-diff

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

将其与原始存储库区分开来

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

5 个答案:

答案 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]