【发布时间】:2018-08-27 17:30:01
【问题描述】:
我对暂存区有很多困惑。 首先Git Gud: The Working Tree, Staging Area, and Local Repo告诉我git commit 后暂存区是空的,这样git commit 可能会将文件移动到本地分支而不是复制。
但是这似乎无法解释这种做法:git reset --soft HEAD~ modifies staged snapshot?。 git reset --soft HEAD^ 在 git commit 之后,然后是 git status,似乎暂存区和 HEAD 之间存在差异^,区别在于HEAD^之后提交的文件。 这样一来,git commit 之后 staging area 似乎不是空的,或者说如果 staging area 是空的,如何解释当前 HEAD 和 staging area 的区别?
还有一个问题是命令
git diff --cached
用来比较暂存区和HEAD的区别。而What does 'stage' mean in git? 告诉我暂存区只存储文件更改。例如我们 git clone 一个包含三个文件的项目:a.txt b.txt c.txt,我们修改了 c.txt 和 git add 它。然后我们执行命令git diff --cached。现在本地分支有三个文件,暂存区只有一个文件。为什么只显示c.txt的变化没有包含暂存区没有a.txt b.txt与本地分支相比的信息。
总之,我有两个问题:
1. git commit,将文件从暂存区移动或复制到本地分支时发生了什么?
2. git diff --cached 发生了什么?只比较暂存区包含的文件?
参考:
提交只是一个检查点,告诉 git 使用我们最后一次提交作为比较来跟踪到目前为止发生的所有更改。提交后,您的暂存区将是空的。 来自 Git Gud: The Working Tree, Staging Area, and Local Repo
【问题讨论】:
标签: git