【发布时间】:2019-09-17 00:27:08
【问题描述】:
我做了一些更改并将它们全部放入索引中。现在我想扔掉工作树,让它看起来完全像提交的HEAD,而不扔掉索引。如何实现?
我所看到的一切都朝着相反的方向发展:在操作索引的同时保留工作树,或者同时操作两者。
例如,是否有某种方法可以存储该索引,然后在不对工作树做任何事情的情况下暂存这些已存储的更改?
作为参考,下面的 hacky 实现了效果,至少在涉及的材料是可修补的文本文件时。假设所有更改都已使用git add 进行:
# apply the staged diff to the working tree, in reverse; i.e. undo it.
git diff --cached | git apply -R
此后,git diff --cached 继续显示阶段性更改,git diff 显示反向差异:这些更改相对于索引被撤消。
这个问题的答案必须重现上述命令管道的效果。
【问题讨论】:
-
git checkout -- .应该只重置您的工作目录,保持舞台不变。 -
@TimBiegelsen 你读过文档吗?如果没有
参数,这会将工作副本重置为索引。由于我已经上演了所有内容(索引 == 工作),因此没有效果。使用 参数,它会影响索引! -
使用
git write-tree将索引写入提交。保存生成的哈希 ID,执行破坏索引的操作,然后使用写入树中的git read-tree修复它。 -
@TimBiegeleisen:不是重复,因为目标是在此操作中保存 index。
-
我想我觉得这部分的问题有点令人困惑:“我想丢弃工作树,让它看起来与提交的 HEAD 完全一样,而不丢弃索引。”然后在评论中写下“因为我已经完成了所有内容(索引 == 工作)”。如果 index == 有效,那么简单的存储不能解决您的问题吗?如果 index == working 你所说的“扔掉工作树,让它看起来和提交的 HEAD 完全一样,而不扔掉索引”是什么意思?
标签: git