我找不到很好的可视化git stash
手术。所以我根据互联网上一些罕见的评论创建了自己的。
这个可视化正确吗?
编辑说明:我需要更改颜色stash@{0}
因为它不是分支。
我的藏品存储在哪里.git
目录?我认为这是一个参考并存储在refs
, right?
Legend:
- C1、C2 - 提交
- Idx - 指数
- WD-- 工作目录
- 虚线和虚线边框 => 可免费进行垃圾收集
重新设计的图像
之前的“git stash
“ 之后git stash
“图表本质上是正确的(有两个新的提交,不在任何分支上,由refs/stash
aka stash@{0}
)。该图中缺少的是索引和工作树本身以相同的方式重置git reset --hard
做到了——事实上,using git reset --hard
—after git stash
.
那个“之后git stash branch
“图表是[编辑以匹配新图表]
不过画起来要困难得多:git stash branch
使用idx
and wd
提交恢复索引和工作树的状态,然后完全丢弃它们 from refs/stash
。这两个提交现在根本没有名称,因此有资格进行垃圾收集(git gc
现在可以在它们过期后立即删除它们,根据“修剪时间”,基于gc.pruneExpire
在您的配置中)。新的分行名称test
指向父提交idx
and WD
指出,回来时idx
and WD
仍然保证存在。
此时立即进行新的提交(git stash branch <name> && git commit
)将从恢复的索引中进行新的提交,如更新的绘图中所示。
我的 .git 目录中存储的内容存储在哪里?
提交本身就是提交,因此像任何其他提交一样存储在.git/objects/
(作为松散或包装的物体)。
我认为它是一个引用并存储在 refs 中,对吧?
Yes, refs/stash
是一个参考。这git stash
代码使用(或滥用?)reflog 条目refs/stash
管理“存储堆栈”,因此哈希 ID 都在refs/stash
本身,以及所有在任何refs/stash
reflog 条目,很重要:他们保留WD
通过直接指向它来活着提交,因此也保留idx
提交(^2
或第二父母WD
)活着(因为它可以通过WD
犯罪)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)