Discuss / Git / "暂存区就没有任何内容了"

"暂存区就没有任何内容了"

Topic source

fighterleslie

#1 Created at ... [Delete] [Delete and Lock User]

暂存区就没有任何内容了

这句话不妥,暂存区不是没有任何内容了,而是暂存区的内容都已经同步到了最近的一次提交,但内容还是存在的。

git diff --cached

上述命令可以对比暂存区和最近一次提交的不同

__ImCaCO3

#2 Created at ... [Delete] [Delete and Lock User]

说得对。 一开始学Git的时候就被这篇文章误导了,到后来才发现暂存区的概念理解错了。

不太明白二位的意思,廖老师也没有回复。我使用git diff --cached之后,无任何变化。

__ImCaCO3

#4 Created at ... [Delete] [Delete and Lock User]

比如说你有新建文件d.txt,一开始里面的内容是

hello

然后你commit了

PS Z:\> git add d.txt
PS Z:\> git commit -m first
[master (root-commit) e78b982] first
 1 file changed, 1 insertion(+)
 create mode 100644 d.txt

这时候你又在文件中加上了world,所以这时文件的内容就是

hello world

这时候你运行git diff ,这个命令的作用是比较暂存区的内容和工作区的差异。

如果按照教程所说,暂存区是干净的,那么这个命令没有输出。

然而这时候会输出

PS Z:> git diff diff --git a/d.txt b/d.txt index ef0493b..f35d3e6 100644 --- a/d.txt +++ b/d.txt @@ -1 +1 @@ -hello +hello world

说明暂存区并不是空的,只是把最近的更新同步到了版本库,也就是层主说的观点。

magicdawn

#5 Created at ... [Delete] [Delete and Lock User]

@__ImCaCO3

以我少有的经验来说

  • git diff, 比较的是 a(已提交仓库) b(工作区, 本地文件)
  • git diff --cached, 比较的是 a(已提交仓库) b(暂存区 Staged)

@fighterleslie

commit 之后暂存区是空的.

whilliy

#6 Created at ... [Delete] [Delete and Lock User]

暂存区不是空的,commit之后,暂存区和master分支的内容一致而已。

ververcpp

#7 Created at ... [Delete] [Delete and Lock User]

@magicdawn

在完成一次提交之后执行 git diff --cached 返回的结果是空的,那么说明 a(已提交仓库)和 b (暂存区)是完全一样的,所以暂存区并不为空

tujide

#8 Created at ... [Delete] [Delete and Lock User]

git diff比较的是分支和工作区同名文件有没有修改,而git diff --cached比较的是暂存区有无内容,是这样理解吗

@magicdawn 经过试验:

  • git diff是比较的是a(暂存区)和 b(工作区,本地文件),而并不是像您所描述的那样,a是已提交仓库。
  • git diff --cached 比较的是a(已提交仓库)和 b(暂存区)

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的

说的很清楚,提交后,啥也没做那工作区就是干净的,上面举的例子修改了都没提交肯定不是干净的啊。。=、= 就不能看清上下文么。。醉了也是。。


  • 1
  • 2

Reply