Git stash 似乎做了很多我想做的事情,除了编写脚本有点困难,因为如果你没有更改,那么git stash; git stash pop会做一些不同于你在存储库中有更改的事情。
git stash; git stash pop
看来这git stash create就是这个问题的答案,一切正常,除了一件事——我无法摆脱创建的存储。有什么办法可以摆脱藏匿处?
git stash create
为了让我 100% 清楚我在做什么:
创建存储:
~/tmp/a(master) $ git stash create 60629375d0eb12348f9d31933dd348ad0f038435 ~/tmp/a(master) $ git st # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: b # ~/tmp/a(master) $ git reset --hard HEAD is now at 555d572 log message
使用存储:
~/tmp/a(master) $ git apply 60629375d0eb12348f9d31933dd348ad0f038435 fatal: can't open patch '60629375d0eb12348f9d31933dd348ad0f038435': No such file or directory ~/tmp/a(master) $ git stash apply 60629375d0eb12348f9d31933dd348ad0f038435 # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: b #
删除存储:(除了最后一点不起作用)
~/tmp/a(master) $ git stash drop !$ git stash drop 60629375d0eb12348f9d31933dd348ad0f038435 '60629375d0eb12348f9d31933dd348ad0f038435' is not a stash reference
要删除使用 创建的普通存储git stash,您需要git stash drop或git stash drop stash@{n}。请参阅下面的更多细节。
git stash
git stash drop
git stash drop stash@{n}
您不需要删除使用git stash create. 从文档:
创建一个存储条目(这是一个常规提交对象)并返回其对象名称,而不将其存储在 ref 命名空间中的任何位置。这旨在对脚本有用。它可能不是您要使用的命令;参见上面的“保存”。
由于没有任何内容引用存储提交,因此最终会收集垃圾。
git stash使用或创建的存储git stash save区保存到refs/stash,并且可以使用 删除git stash drop。与所有 Git 对象一样,实际存储内容不会从您的计算机中删除,直到在gc这些对象过期后修剪它们(默认为 2 周后)。
git stash save
refs/stash
gc
较旧的 stash 保存在refs/stash reflog (try cat .git/logs/refs/stash) 中,可以使用 删除git stash drop stash@{n},其中n是 显示的数字git stash list。
cat .git/logs/refs/stash
n
git stash list