gpt4 book ai didi

Git 存储暂存文件。 stash 是否将暂存文件转换为未暂存文件?

转载 作者:IT王子 更新时间:2023-10-29 00:50:32 27 4
gpt4 key购买 nike

我正在对代码库进行大量更改。有些变化已经上演,有些还没有。我需要切换到另一个分支,但还没有准备好提交,所以我使用 git stash stash 了我的当前状态。

后来,我用 git stash apply 来应用我的存储。然后我运行 git status。我注意到我的分阶段更改不再显示为“已分阶段”,而是显示为“未分阶段提交的更改”。我的理解是否正确,实际上没有数据丢失,而是“暂存”数据现在只是转换为“未暂存”数据?

编辑:我应该补充一点,一些有问题的文件在存储时有暂存版本和未暂存版本。例如,文件 A 进行了一些更改,这些更改已暂存。然后,对尚未上演的文件A进行了一些更改。然后,藏起来了。

最佳答案

所问问题(“存储是否将暂存文件转换为未暂存文件”)的答案是肯定和否。

如果您使用 git stash apply 应用(对比 git stash pop),您的状态很好,因为存储仍然存在。但让我们回顾一下,看看底层机制,因为它在这里很重要。

当你运行 git stash push(新动词)或 git stash save(旧动词)(或普通的 git stash执行 push/save), git 进行两次 1 提交,这些提交不在任何分支上。一次提交保存索引的状态,即,无论你上演什么。第二次提交保存工作树的状态,即其他所有内容。

稍后,当您使用 git stash apply 时,git 会将更改混合在一起,以便不会暂存任何内容,除非您添加 --index 2apply 操作,在这种情况下,它会恢复(如果可以的话)您之前对分阶段和非分阶段的安排。

当您使用 apply 时,存储脚本也会保留存储提交,因此如果应用没有按照您想要的方式进行——包括您忘记了 --index 或拼写错误(参见脚注 2)——您可以 git reset --hard(无论如何,假设您在开始时一切都处于干净状态)并重新执行 apply.

不过,如果您使用过 pop,并且 git 认为应用有效,它就会删除存储。出于这个原因,我通常建议使用单独的应用和删除。

(旁注:我实际上建议尽可能避免 git stash。它有太多陷阱,而且它在历史上有很多错误. 但是如果你用过它现在后悔了,考虑一下 git stash branch,它将一个保存的 stash 变成 一个分支。参见下面的 ADTC's comment。你可以这样做这与已经 pop 的存储的原始哈希 ID,尽管您通常需要一个“干净”状态。新分支从您创建存储时所在的提交中分支出来。)


1使用 -u-a,不仅保存暂存文件和未暂存文件,还保存忽略文件和/或所有文件,存储脚本进行三次 提交。但是,如果没有这些标志,这些文件就不会进入存储的任何部分。

2令人困惑的是,存储脚本还有一个 --keep-index 标志,它允许您为 apply 操作指定,但是在那里没有任何意义。相反,--keep-index 会影响 stash 在进行特殊存储提交后所做的事情。有时我不小心做了 git stash apply --keep-index 而不是 git stash apply --index,混淆了这两个选项。

关于Git 存储暂存文件。 stash 是否将暂存文件转换为未暂存文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31595873/

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