Git diff缓存什么都不做

时间:2015-06-10 19:06:51

标签: git github

我在这里:

  1. 在GitHub上创建了一个新的回购
  2. 在我的电脑上本地初始化(git add。)我的工作目录
  3. 提交(git commit -m)所有对阶段的更改
  4. 通过添加新的.png文件进行了另一项更改
  5. 是否有另一个git commit -m
  6. 现在我想查看所有暂存文件的列表,这些文件将在我第一次(或实际上在任何时间)实际推送到远程仓库之前推送(https //.../../) 。所以我假设有2个提交更改以显示
  7. 如果我尝试commit again (#3),则会显示nothing to commit, working directory clean。因此,我必须在上次成功做出承诺,这就是为什么它会说这个。

    当我执行git status时,我得到nothing to commit, working directory clean

    但是当我尝试在OS X中的终端中键入git diff --cached --name-onlygit diff --staged时,它什么也没做。我再次运行该命令后得到命令提示符。

    我在这里遗漏了什么吗?我已经在git diff上搜索了一些内容,但我必须是盲目的。

2 个答案:

答案 0 :(得分:5)

运行git diff --cached将显示存储库和索引之间的区别(文件在提交到存储库之前由git add暂存的位置)。它不会查看工作目录中的文件,也不会比较存储库中的修订版本之间的差异。

如果要查看本地存储库与上游存储库的不同之处,请首先确保远程存储库的本地缓存是最新的:

git remote update

然后将您的本地分支与远程存储库中的相应分支进行比较:

git diff --name-only mybranch origin/mybranch

..假设您的遥控器名为origin,它可能是。

<强>更新

如果您要推送到空的远程存储库,那么答案是&#34;将推送哪些文件?&#34;是&#34;所有&#34;,没有任何东西可以运行diff

您可以运行git ls-files查看存储库中所有文件的列表。

在我之前的示例中,mybranch将是分支的名称,例如masterbug/1234this-is-a-nifty-feature,并且该示例假定您正在推动本地分支到远程存储库中同名分支。

更新2

你问:

  

我的远程分支是一个url所以原点是什么... uri / [repo name]?所以   起源是uri?我将什么称为我当地的名字   分支?

git存储库可以与一个或多个远程存储库相关联,称为&#34;遥控器&#34;。如果克隆远程存储库:

$ git clone git@github.com:larsks/sandbox.git

您最终会得到一个名为origin的遥控器,指的是这个存储库:

$ cd sandbox
$ git remote -v
origin  git@github.com:larsks/sandbox.git (fetch)
origin  git@github.com:larsks/sandbox.git (push)

您的本地分支最初名为master,因此您的初始推送看起来像:

$ git push origin master

这要求git将您的本地master分支推送到远程存储库的master分支,称为origin

但你可以使用&#34; git checkout -b&#34;创建新的分支。或&#34; git branch&#34;命令。有很多文档可能会提供比我在这个答案中更好的概述。我会从The Git Book开始。

答案 1 :(得分:1)

由于图片价值1000字,而且我不想重新发明轮子,请允许我链接https://git-scm.com书中的一个插图,显示文件的生命周期git并显示缓存的作用。我承认有一些我不喜欢这张照片的东西,但是它很适合这个目的。

enter image description here

如果您已经完成了一些修改并处于暂存阶段(“俚语”用于说“添加到缓存”),其中一些修改为git add且更精细git add -p,则命令git diffgit diff --cached是查看已添加到缓存中的内容以及仍可添加的内容的方法。在这里添加,我的意思是git add - 明智的,所以添加一个未跟踪的文件,或添加一个修改。

  • git diff:显示可以git add同步的修改。请注意,这仅适用于“stage the file”箭头,它不会列出未跟踪的文件。
  • git diff --cached:仅显示 已经上演的内容和之前的提交之间的差异。

在您的情况下,git diff --cached没有显示任何内容,因为您已经提交了暂存区域中的所有内容,并且从那时起未添加任何内容。

调用该选项--cached的原因是因为git暂存区最初称为cache。您还会遇到index一词。

@ larsks的回答是正确的,我只是想对他回答的评论做出反应。