qzb*_*qzb 225
我们假设您的存储列表如下所示:
$ git stash list
stash@{0}: WIP on master: Add some very important feature
stash@{1}: WIP on master: Fix some silly bug
Run Code Online (Sandbox Code Playgroud)
首先,您必须删除要重命名的存储条目:
$ git stash drop stash@{1}
Dropped stash@{1} (af8fdeee49a03d1b4609f294635e7f0d622e03db)
Run Code Online (Sandbox Code Playgroud)
现在只需使用删除后返回的提交sha的新消息添加它:
$ git stash store -m "Very descriptive message" af8fdeee49a03d1b4609f294635e7f0d622e03db
Run Code Online (Sandbox Code Playgroud)
就是这样:
$ git stash list
stash@{0}: Very descriptive message
stash@{1}: WIP on master: Add some very important feature
Run Code Online (Sandbox Code Playgroud)
这个解决方案需要git 1.8.4或更高版本,是的,它也适用于脏工作目录.
Jul*_*que 60
除非您手动执行或对Git做出改进,否则您可以使用别名:
git config --global alias.stash-rename '!_() { rev=$(git rev-parse $1) && git stash drop $1 || exit 1 ; git diff-index --quiet HEAD; s=$?; [ $s != 0 ] && git stash save "tmp stash from stash-rename"; git stash apply $rev && shift && git stash save "$@" && [ $s != 0 ] && git stash pop stash@{1}; }; _'
Run Code Online (Sandbox Code Playgroud)
用法:" git stash-rename <stash> [save options] [<message>]
"
有[save options]
任何选择git stash save
:[-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all]
例:
$ git stash list
stash@{0}: On master: Pep8 format
stash@{1}: On master: co other than master with local changes
stash@{2}: On master: tests with deployAtEnd
# Let's say I want to rename the stash@{2} adding an issue reference:
$ git stash-rename stash@{2} NXP-13971-deployAtEnd
$ git stash list
stash@{0}: On master: NXP-13971-deployAtEnd
stash@{1}: On master: Pep8 format
stash@{2}: On master: co other than master with local changes
Run Code Online (Sandbox Code Playgroud)
即使您有本地未分阶段的更改,这将工作:)
简化的脚本,qzb的学分,https://stackoverflow.com/a/35549615/515973
git config --global alias.stash-rename '!_() { rev=$(git rev-parse $1) && git stash drop $1 || exit 1 ; git stash store -m "$2" $rev; }; _'
Run Code Online (Sandbox Code Playgroud)
用法:" git stash-rename <stash> [<message>]
"
小智 13
这很简单。首先,使用以下命令撤消最后一次存储:
git stash pop
Run Code Online (Sandbox Code Playgroud)
在此之后,您可以通过这种方式使用自定义名称保存存储:
git stash save "your explanatory name"
Run Code Online (Sandbox Code Playgroud)
我希望它对你有用。:)
为了读者的利益,这里是对当前接受的正确答案的扩展。
如果您不仅想更正存储消息,还想更正存储的提交消息,这样
git stash list
Run Code Online (Sandbox Code Playgroud)
和
git log --oneline -1 stash
Run Code Online (Sandbox Code Playgroud)
两者都同意所显示的内容,您还需要更多。可能有更好的方法,但我希望这里的食谱很容易理解。
为了能够做到这一点,git commit --amend
您需要在分支机构的 TIP 上。因此解决方案是:
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
Run Code Online (Sandbox Code Playgroud)
解释:
git commit --amend
替换提交消息,这会更改“有问题的存储”的 SHA缺点:
这会暂时切换分支。所以这个配方只能在git status --porcelain
干净的情况下应用(阅读:不输出任何内容)
它对存储区重新编号,因此更改后的存储区变为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
Run Code Online (Sandbox Code Playgroud)
输出
*-. 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
Run Code Online (Sandbox Code Playgroud)
现在无需更改提交(注意:下面的 SHA 在您这边会有所不同):
git stash drop stash@{1}
git stash store -m ...changed... 2fbf9007dfdfb95ae269a19e13b8b9ca3e24181c
git log --oneline --graph --decorate --all; git stash list
Run Code Online (Sandbox Code Playgroud)
输出
*-. 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
Run Code Online (Sandbox Code Playgroud)
如您所见,stash@{0}
仍然显示如图2fbf900 (refs/stash) WIP on master: 8bdcc32 D
所示git log
。如果你仔细观察,你会发现,有几个提交已经改变了 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
Run Code Online (Sandbox Code Playgroud)
输出
*-. 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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,refs/stash
SHA 也发生了变化。