Git命令在不修改工作树的情况下保存存储?

标签 git git-stash refs

我一直想使用一个 git 命令来保存一个存储而不修改我的工作树,作为一个轻量级的备份,它可以安全地避免任何 git 重置或任何我可能做的事情来搞砸我的索引。基本上等同于“git stash save && git stash apply”的功能,只是永远不会触及工作副本,因为这会使某些文本编辑器/IDE 变得胡思乱想。

类似这样的事情正在接近我想要的,但不完全是:

git update-ref refs/stash `git stash create "Stash message"`

这在功能上有效,但我遇到的问题是“git stash list”中没有显示任何 stash 消息,即使实际的 stash 提交确实包含我的消息。考虑到存储量有多大,存储消息非常重要。

最佳答案

git stash store "$(git stash create)"

将创建类似于您使用 git stash 获得的存储条目,而无需实际接触和清除您的工作目录和索引。

如果您检查存储列表或查看所有提交图(包括存储),您会发现它与您通过正常调用 git stash 获得的结果相似。只是存储列表中的消息不同(通常类似于 "stash@{0}: WIP on master: 14e009e init commit",这里我们将得到 "stash@{0} : 通过“git stash store”创建)

$ git status --short
M file.txt
A  file2.txt

$ git stash list

$ git stash store "$(git stash create)"

$ git stash list
stash@{0}: Created via "git stash store".

$ git stash show 'stash@{0}'
 file.txt  | 2 +-
 file2.txt | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

$ git log --oneline --graph --all
*   85f937b (refs/stash) WIP on master: 14e009e init commit
|\
| * 26295a3 index on master: 14e009e init commit
|/
* 14e009e (HEAD -> master) init commit

$ git status
M file.txt
A  file2.txt

更多解释:

一个 git stash 条目使用具有一些已定义结构的正常提交来表示。基本上它是一个常规提交对象,有 2 个父项(如果您使用 --include-untracked 选项则有 3 个)(更多信息 12 )。

git stash create 创建代表存储条目的提交并返回给你 object name (SHA-1) 的提交对象(有 2 或 3 个 parent 的对象)。这是一个dangling commit (您可以通过在 git stash create 之后调用 git fsck 来验证它)。你需要让 refs/stash 指向这个悬空提交,你可以通过 git stash store (或者通过 git update-ref 像其他答案,因为 git stash store uses git update-ref 来完成它的工作)。

最好查看 git stash push 的实际源代码,看看它基本上是在调用 git stash create and git stash store然后做 some logic清理文件(哪个取决于您在 git stash push 中使用的选项)。

关于Git命令在不修改工作树的情况下保存存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6315459/

相关文章:

Git 引用目录 <repo>/.git/refs

GitFlow : safely merge develop changes to a feature branch

Git 分支名称与操作系统相关吗?

java - 打破单一的java应用程序

Git 存储问题

javascript - React - 无法访问有状态组件事件处理程序中的引用

c++ - 为团队的其他成员恢复对 Eclipse 项目库的更改

git - 如何在 git 中 merge 两个提交?

git checkout 分支名称不起作用

javascript - Es6 React 组件引用