gpt4 book ai didi

git - 这是 "git stash"操作的有效可视化吗?

转载 作者:太空狗 更新时间:2023-10-29 14:43:01 25 4
gpt4 key购买 nike

我找不到 git stash 操作的良好可视化。因此,我根据互联网上一些罕见的评论创建了自己的。

enter image description here

这个可视化正确吗?

编辑说明:我需要更改 stash@{0} 的颜色,因为它不是分支。

在我的 .git 目录中存储存储在哪里?我认为它是一个引用并存储在 refs 中,对吧?


图例:

  • C1、C2 - 提交
  • Idx - 索引
  • WD - 工作目录
  • 虚线和虚线边框 => 免费用于垃圾收集

重做图像

enter image description here

最佳答案

git stash 之前”和“git stash 之后”图表基本上是正确的(有两个新提交,不在任何分支上,由 refs/stash 又名 stash@{0} 指向)。此图中缺少的是索引和工作树本身以相同的方式重置 git reset --hard做到了——事实上,使用 git reset --hard —在 git stash 之后.

git stash branch 之后”图是 [编辑以匹配新图] 不过更难画:git stash branch使用 idxwd promise 恢复索引和工作树的状态,然后从 refs/stash完全删除它们 .这两个提交现在根本没有名称,因此符合垃圾收集条件(git gc 现在可以在它们过期后立即删除它们,根据“修剪时间”,基于您配置中的 gc.pruneExpire)。新分行名称test指向 idx 的父提交和 WD尖,背当idxWD仍然保证存在。

此时立即进行新提交 ( git stash branch <name> && git commit ) 将从恢复的索引进行新提交,如更新后的绘图。

Where are stashes stored in my .git directory?

提交本身就是提交,因此像任何其他提交一样存储在 .git/objects/ 中(作为松散或包装好的物体)。

I think it's a reference and stored in refs, right?

是的,refs/stash是一个引用。 git stash代码使用(或滥用?)refs/stash 的 reflog 条目管理“存储堆栈”,因此 refs/stash 中的哈希 ID本身,以及任何refs/stash中的所有那些reflog 条目,重要的是:它们保留 WD commit alive,直接指向它,因此也保持 idx提交(^2WD 的第二个父级)活着(因为它可以通过 WD 提交访问)。

关于git - 这是 "git stash"操作的有效可视化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com