“要提交”的更改是存储在
指数
(阿卡
中转区
阿卡
隐藏物
)git进行新的提交
从
索引里有什么
马上
,所以对索引的一个很好的描述是
你打算做什么
.
如果您复制了存储库,但没有复制索引(或以某种方式复制了索引,但没有保留所有索引),这将解释问题。索引既不是存储库本身,也不是工作树。相反,指数
之间
存储库和工作树。因此,文件可以在那里,在工作树中,按顺序排列,但在索引中丢失,git将告诉您,如果现在提交,删除将被提交。
你可以告诉git重新填写索引
从
当前提交,使用
git reset --mixed
. 或者,可以使用
git add
. 即:
-
Git重置--混合
:从复制(所有文件)
HEAD
索引
-
git add
file
:复制(指定的
file
)从工作树到索引
如果您将索引视为介于
头
提交和工作树,这一切都更有意义:
HEAD index work-tree
---------- ---------- ----------
README.txt README.txt README.txt
file.ext file.ext file.ext
main.py main.py main.py
-
这个
头
每个文件的副本都是只读的:任何提交都不能更改,它是已提交的副本。这些文件是压缩的,可能是高度压缩的,并且是一种特殊的、仅限Git的格式。
-
每个文件的索引副本仅为git,就像
头
复制,除了它是读/写的:它已经
解冻
. 这个
下一个
提交将通过冻结索引副本来使用该索引副本(一旦冻结所有文件并完成提交,则该索引副本
变成
这个
头
复制是因为
头
对新提交的更改)。
-
每个文件的工作树副本都是一个普通的文件,其格式是普通的。Git没有
使用
它做出承诺。吉特不太在乎
关于
它,真的;git只是为
你
使用,合作,如果你愿意的话可能会改变。
一旦你
改变
一个文件,你用
Git添加
将其复制回索引,覆盖旧的索引副本。这个
add
process压缩并git验证文件,以便可以提交它。
这个
git commit
命令获取索引中的任何内容
马上
并将其冻结为新的提交。新的提交将成为
头
承诺。
当你第一次跑步时
git checkout
branch
,git从tip commit填充索引和工作树
branch
. 承诺变成
头
承诺,和
头
和索引匹配。当你做一个
新的
提交,新的提交将成为当前分支的尖端,并且
头
和索引匹配。请注意,工作树仅仅是一个
输出
最初的结帐,不是
输入
新的承诺。(或者更确切地说,其中的一些文件被放入
指数
如果你
Git添加
-编辑了一些或所有文件。)
通常,您可以使用
git rm
:
-
git rm
file
删除
文件
从
二者都
索引
和
工作树;或
-
移除文件
文件
删除
文件
从索引中删除,但将其单独留在工作树中。
不管怎样,搬走之后,比如说,
file.ext
从索引上看,你还保留着它
头
,所以您有以下两个结果之一:
HEAD index work-tree
---------- ---------- ----------
README.txt README.txt README.txt
file.ext file.ext
main.py main.py main.py
或:
HEAD index work-tree
---------- ---------- ----------
README.txt README.txt README.txt
file.ext
main.py main.py main.py
在工作树中查找不会告诉您文件已从
指数
,它只会告诉您文件是否已从
工作树
. 但是
git status
会告诉你的,因为
Git状态
跑
二
git diff
S:
-
第一,
Git状态
比较
头
提交到索引。不管有什么不同,git告诉你的是一个“需要承诺的改变”(“我猜是qui seront valides”)。不管是什么
相同的
,吉特什么也没说。
-
然后,
Git状态
将索引与工作树进行比较。不管有什么不同,git告诉您,这是一个至少尚未承诺的变化。你可以
Git添加
当然,更新后的文件进入索引;之后,第一次比较,
头
vs索引,会显示出一些不同的东西。
-
一个不在索引中但在工作树中的文件被称为
未追踪
(“非瑞士人”)。即使文件在
头
承诺。(但是,请注意,您可以通过在
.gitignore
)
结论:档案在
头
以及工作树,但不在索引中
你展示的结果正是这个案例的预期结果。文件在
头
但不在索引中:它将从
下一个
提交,除非你把它放回索引中。文件不在索引中,而是在工作树中:它是未跟踪的。