我有一堆名字不正确的东西。我想修改一下名字,让它更准确。

我如何重命名收藏?


当前回答

为了读者的利益,这里是对目前公认的正确答案的扩展。

如果您不仅想更正存储消息,还想更正存储的提交消息,例如

git stash list

and

git log --oneline -1 stash

双方都同意所展示的内容,你需要更多一点。也许有更好的方法,但我希望这个食谱很容易理解。

为了能够做git提交-修改,你需要在一个分支的尖端。因此,解决方案是:

git checkout -b scratch stash@{1}
git stash drop stash@{1}
git commit --amend -m "$MESSAGE"
git stash store -m "$MESSAGE" HEAD
git checkout master
git branch -D scratch

解释道:

创建一个新的(还不存在)“刮”分支从“藏匿在问题”,并切换到它 把旧的藏起来。这是安全的,因为树枝上还有这个。 使用git commit -amend来替换提交消息,这将改变“问题中的stash”的SHA 根据qzb的回答,把钱存起来 切换回去(假设你来自“master”)和清理

缺点:

这会临时切换分支。所以这个配方只能应用于git状态-瓷器是干净的(阅读:不输出任何东西) 它重新编号存储,因此更改后的存储变成了stash@{0} 您需要输入$MESSAGE两次或使用一些环境变量(在本例中为MESSAGE) 您需要找到一个未使用的分支名称

有一些方法可以在不切换分支的情况下做到这一点,但这超出了本文的范围。

例子

git init scratch
cd scratch
for a in A B C D; do date >$a; git add $a; git commit -m $a; done
for a in X Y; do echo $a > Z; git stash save --all; done
git log --oneline --graph --decorate --all; git stash list

输出

*-.   e0e281b (refs/stash) WIP on master: 8bdcc32 D
|\ \  
| | * 4d62f52 untracked files on master: 8bdcc32 D
| * 096f158 index on master: 8bdcc32 D
|/  
* 8bdcc32 (HEAD, master) D
* c84c659 C
* 49bb2da B
* b1852c6 A
stash@{0}: WIP on master: 8bdcc32 D
stash@{1}: WIP on master: 8bdcc32 D

现在不改变commit(注意:下面的SHA在你这边会不一样):

git stash drop stash@{1}
git stash store -m ...changed... 2fbf9007dfdfb95ae269a19e13b8b9ca3e24181c
git log --oneline --graph --decorate --all; git stash list

输出

*-.   2fbf900 (refs/stash) WIP on master: 8bdcc32 D
|\ \  
| | * 246dc5c untracked files on master: 8bdcc32 D
| * 80c5ea0 index on master: 8bdcc32 D
|/  
* 8bdcc32 (HEAD, master) D
* c84c659 C
* 49bb2da B
* b1852c6 A
stash@{0}: ...changed...
stash@{1}: WIP on master: 8bdcc32 D

正如你所看到的,在git日志中,stash@{0}仍然显示为master: 8bdcc32 D上的2fbf900 (refs/stash) WIP。如果仔细观察,就会发现有几个提交更改了SHA。这与处理存储的方式有关(SHA包括父存储,并且存储将它们的存储作为父存储)。

修复:

git checkout -b scratch stash
git stash drop
git commit --amend -m ...changed...
git stash store -m ...changed... HEAD
git checkout master
git branch -D scratch
git log --oneline --graph --decorate --all; git stash list

输出

*-.   4d55186 (refs/stash) ...changed...
|\ \  
| | * 246dc5c untracked files on master: 8bdcc32 D
| * 80c5ea0 index on master: 8bdcc32 D
|/  
* 8bdcc32 (HEAD, master) D
* c84c659 C
* 49bb2da B
* b1852c6 A
stash@{0}: ...changed...
stash@{1}: WIP on master: 8bdcc32 D

你也可以看到,refs/stash也改变了SHA。

其他回答

多年后,我回答了自己的问题:这是刚刚宣布的,所以我想我应该在这里加上它。

许多GUI git客户端(例如,Fork 1.58和更新版本)现在支持直接重命名存储。

这里有很多复杂的答案。我是这么说的:

首先让我们找到你的收藏索引:

git stash list

例如,现在将其应用于git stash apply {N}

git stash apply 2

现在可以用一条新消息保存更改

git stash push -m 'My descriptive stash message'

如果你想清理原来的存储,记得将索引增加1,因为新的存储会增加所有现有的索引(所以这里我们要N + 1)

git stash drop 3

这很简单。首先,撤销最后的藏匿与:

git stash pop

在这之后,你可以保存一个自定义的名称,以这种方式:

git stash save "your explanatory name"

希望对大家有用。:)

最简单的方法:弹出你的stash与git stash流行,然后保存它再次与git stash保存你的名字

我认为这是不可能的。有一个关于存储重命名的提议,但是还没有实现。

我的大意是: 实现一个新的git reflog update命令,更新与特定reflog条目关联的消息。为此,一个新的update_reflog_ent()函数(在reflog.c中)会将与特定reflog条目相关的消息更改为update。update_reflogg()函数将使用for_each_reflog_ent()和update_reflog_ent来实际执行更改。 git stash rename命令只需要使用适当的ref和new消息调用git reflog update。

当然,你也可以弹出隐藏,并做一个git隐藏保存[消息]