首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么签出和重置更改索引?

为什么签出和重置更改索引?
EN

Stack Overflow用户
提问于 2014-01-11 18:42:55
回答 3查看 504关注 0票数 1

我认为索引仅用于您为下一次提交准备的文件,但重置和签出也都更新了索引:

git结帐

若要准备工作,请通过更新工作树中的索引和文件切换到它,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-11 20:06:02

其思想是,git总是提交当前状态的快照,而不仅仅是差异。因此,在进行签出时,将更新索引,以包含您刚刚签出的内容的快照,然后更改添加的文件/更改。

我的问题是,我是在错误的假设下操作的,即只有更改才会添加到索引中。

票数 1
EN

Stack Overflow用户

发布于 2014-01-11 18:54:48

  • git复位只可以更改HEAD (git reset --soft)、HEAD和索引(默认)或HEAD索引和工作树(git reset --hard)。
  • 只有在切换分支时,git结帐才能更改索引,以便开始根据该分支的内容暂存您的工作。

那次讨论指出了签出更改索引的原因:

我对指数的理解是,它是中间派:

  • 将工作树中的东西移动到对象存储区。
  • 把东西从对象存储转移到你的工作树。

因此,当您签出blob时,它首先从对象存储复制到索引,然后从索引复制到工作树。

托瑞克提到了反映同一线程的另一部分的在评论中

请注意,您可以通过使用git show提取文件来绕过索引的写入:

代码语言:javascript
复制
git show HEAD~3:file > file 

将覆盖file的工作目录版本,就像git checkout HEAD~3 -- file一样,但不会更新索引。

我在“git show”中更详细地介绍了如何从Git中的特定修订中检索单个文件?

还要注意的是,git-show没有将过滤器应用于文件(污点/清除或任何自定义过滤器)。

票数 5
EN

Stack Overflow用户

发布于 2014-01-11 18:51:43

清理检查或重置后,HEAD的内容与索引和工作树的内容相同。

之后,通常更改工作树,然后使用git add更新索引,最后使用git commit将结果索引转换为commit。

索引的工作原理与工作树非常相似:从内容、当前提交开始,更改一些文件,最后将结果变为提交。

如果使用git checkoutgit reset更改当前提交,则索引必须更改,以允许您更改它以创建新提交。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21066364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档