无法使用git diff对远程进行差异更改

时间:2015-09-30 08:32:15

标签: git git-commit git-diff

我想要的是查看我的本地仓库对远程仓库所做的更改。

当我 git status 时,我得到了:

On branch develop  
Your branch is ahead of 'origin/develop' by 6 commits.  
  (use "git push" to publish your local commits)  
  nothing to commit, working directory clean  

How do I show the changes which have been staged?

中所述

一个(两个)git差异应该可以工作。不幸的是,在我的情况下,所有这些都没有返回。

git diff //empty - which seems to be fine 
git diff --cached //empty 
git diff HEAD //empty

我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

您尝试过三种git diff形式:无选项,--cached,并指定单个修订版本(在本例中为HEAD)。您链接的问题中的第二个答案显示了这三种git diff形式的完整图形摘要。这些都不是你想要的。

但是,还有更多表格!

您可以要求git diff比较两个特定的提交(修订版),例如:

git diff HEAD@{upstream} HEAD

或:

git diff origin/develop develop

根据您引用的git status输出,这些内容会做同样的事情,因为HEAD目前与develop相同(您在分支机构开发" #34;在git status输出中),HEAD@{upstream}将解析为origin/develop("提前/开发'来自6个提交" )。 (请注意,在某些shell /命令行解释器中,您可能必须引用一个或两个花括号。)

您也可以使用:

git diff HEAD@{upstream}..HEAD

这种带有文字两点..的表示法通常意味着其他内容:有关详细信息,请参阅the gitrevisions documentation。但是,在使用git diff时,前端命令只会将此解析为两个指定的提交,然后使用这两个提交。

我认为你会得到更多 - 而且更典型的是你想要的东西:

git log -p HEAD@{upstream}..HEAD

因为这将分别显示每个提交,以及这些提交所做的更改。 Git通过将每个提交与其父提交进行比较来查找这些更改。 (这也是git如何确定哪些提交 那六个。这是以相当图形理论的形式在"指定范围"部分中描述的。)本质上, git log -p查看要显示的每个提交,然后在该提交的父级和提交之间执行git diff

对于合并提交,git log -p的输出(以及git show的输出,如git log -p但仅显示特定提交或其他对象,您要求它显示,而不是像git log这样的提交历史记录被修改:git显示了一个"组合差异"默认情况下,它试图突出显示合并过程中发生的事情,而不是两个分支中发生的事情。你现在不需要了解这一点,只记得在记录或显示合并时,git隐藏了不必要的复杂性(在你需要之前这很好;然后搜索StackOverflow :-))。

如果遗漏-pgit log只会显示提交消息。有关(多个)更多选项,请参阅the git log documentation

作为codeWizard noted above,所有这些命令都使用git"其中遥控器是"基于最后一次git调用遥控器并获取最新信息。此信息可能已过期,甚至可能是几秒钟,甚至几分钟或(喘息)小时。 :-)要让你的本地git与遥控器保持同步,你必须运行git fetch(额外的标志,--all--prune,并不总是需要它们,尽管它们可能是一个好主意,取决于你与谁共享和如何分享。根据您的喜好,经常或很少地运行git fetch;请记住,您可能会在几秒钟或几个月内过时,并且git不会在任何方面关心:您想要更新的频率由您决定。

答案 1 :(得分:1)

您已提交更改。

Diff将显示索引和存储库之间的区别。

如果要查看本地存储库与远程存储库之间的更改,请执行以下操作:

git fetch --all --prune
git log ^master origin/master

// or:
git log master ^origin/master

两行之间的区别在于,一行将显示拉差异,而第二行将显示推送差异

答案 2 :(得分:0)

这可能为时已晚。但是,如果您使用的是OS X,并且您的git core.pager或LESS环境变量具有-F选项。有时git diff没有显示任何内容。

git程序非常可靠,你不太可能遇到git的错误。这似乎是OS X上/usr/bin/less的错误。)

答案 3 :(得分:-1)

您有远程存储库中不存在的提交。 git diff不是一个可以为您提供任何相关信息的命令。

Git diff显示您尚未提交对本地存储库的更改。由于这个原因,你没有在你的差异中得到任何东西。您没有对本地存储库进行任何更改。

Git知道几个“阶段”

  1. 对本地存储库的更改。与提交的版本相比,您有一个文件要对其进行一些更改。您可以使用git diff
  2. 查看这些更改
  3. 分阶段更改,准备提交到本地存储库。这是一组要提交的更改。如果您git commit并且git add引入此阶段,则会提交此内容。您可以使用git diff --cached
  4. 查看这些更改
  5. 承诺改变。现在(至少在本地)这是本地存储库中文件的新现状。如果需要,可以将其推送到远程存储库。