例如,可以在三个位置放置文件-树,索引和工作副本。当您仅将文件添加到文件夹时,即会将其添加到工作副本中。
当您执行类似操作时git add file
,请将其添加到索引中。提交时,也将其添加到树中。
它可能会帮助您了解git reset中另外三个常见标志:
git reset [- <mode>
] [ <commit>
]
此表单将当前分支头重置为,<commit>
并可能更新索引(将其重置为的树<commit>
)和取决于的工作树<mode>
,该树必须为以下之一:--
soft
完全不触摸索引文件或工作树(但将头重置为<commit>
,就像所有模式一样)。就像git status那样,这会将所有更改的文件保留为“要提交的更改”。
-混合
重置索引但不重置工作树(即,已更改的文件将保留但未标记为提交),并报告尚未更新的内容。这是默认操作。
- 硬
重置索引和工作树。由于对工作树中跟踪文件的任何更改,<commit>
都将被丢弃。
现在,当您执行类似操作时git reset HEAD
,实际上是git reset HEAD --mixed
将索引重新设置为开始添加文件/对索引添加修改之前的状态(通过git add
),在这种情况下,工作副本和索引(或暂存)是同步的,但是重置后您使HEAD和索引保持同步。
git rm
另一方面,从工作目录和索引中删除文件,并且在提交时,该文件也会从树中删除。git rm --cached
但是,仅从索引中删除文件,并将其保留在工作副本中。这与的完全相反。git add file
在这种情况下,您使索引不同于HEAD和工作文件,因为HEAD具有文件的先前提交版本,工作副本(如果有)或HEAD的内容进行了最后修改。文件,然后您从索引中删除了该文件。现在,提交将同步索引和树,并且文件将被删除。
git rm --cached
的git diff
命令不会显示任何差异,但git diff --cached
节目的差异,就好像它仍缓存。该git status
然而,文件显示为是Untracked
。似乎有点前后矛盾。