如何在 git 中按名称命名和检索存储?
Posted
技术标签:
【中文标题】如何在 git 中按名称命名和检索存储?【英文标题】:How to name and retrieve a stash by name in git? 【发布时间】:2012-07-01 10:13:33 【问题描述】:我一直认为您可以通过 git stash save stashname
为存储区命名,稍后您可以通过 git stash apply stashname
应用该名称。但似乎在这种情况下,所发生的只是stashname
将用作存储描述。
有没有办法真正命名一个存储?如果没有,您会推荐什么来实现等效功能?本质上,我有一个小储藏室,我想定期申请,但不想总是在git stash list
中寻找它的实际储藏室编号。
【问题讨论】:
git stash push -m stashname
是current syntax。 git stash save stashname
已被弃用。
git stash push -m stashname 在 2.8.0.windows.1 中不起作用。
Git for Windows 2.26.0 日前发布。也许现在已经修好了。 github.com/git-for-windows/git/releases/tag/v2.26.0.windows.1
其实我认为如果你的存储清单超过三个项目,你应该重新考虑你的工作流程。
简单的自定义 git 命令 (link to gist)。用法:git bottle name
,然后是git apply name.patch
,如果您想要更完整的解释和用法示例,请参阅my answer。
【参考方案1】:
这就是你的做法:
git stash push -m "my_stash"
"my_stash"
是存储名称。
一些更有用的知识:所有的存储都存储在堆栈中。 类型:
git stash list
这将列出你所有的藏匿处。
要应用存储并将其从存储堆栈中删除,请键入:
git stash pop stash@n
要应用存储并将其保存在存储堆栈中,请键入:
git stash apply stash@n
n
是隐藏更改的索引。
请注意,您可以使用存储名称应用存储并将其保存在堆栈中:
git stash apply my_stash_name
【讨论】:
这没有回答问题。默认情况下,您的 stash 最终会得到一堆数字,但这并不能回答您如何轻松识别名称。 OP 明确地试图避免自定义名称的尴尬命名 stash@n 名称。git stash apply <custom-name>
不回答有关按名称检索存储的问题。
git stash push -m my_stash
是current syntax。 git stash save my_stash
已被弃用。
这不是无关紧要的。很有用。【参考方案2】:
从 2.15.x/2.16 开始,git stash save
已弃用,您可以改用 git stash push -m "message"
你可以这样使用它:
git stash push -m "message"
“消息”是您对该存储的注释。
为了检索存储,您可以使用:git stash list
。这将输出一个这样的列表,例如:
stash@0: On develop: perf-spike
stash@1: On develop: node v10
然后你只需使用apply
给它stash@index
:
git stash apply stash@1
参考文献 git stash man page
【讨论】:
文档显示push
而不是 save
语法:git stash push
这才是真正的答案。不幸的是,上面有很多旧答案。
更多关于更新的git stash push
:***.com/a/47231547/6309
FWIW:在 Powershell 中运行git stash apply stash@1
时,您将得到一个error: unknown switch 'e'
返回。而是使用git stash apply --index 1
或git stash apply 'stash@1'
或使用反引号` 转义
和
。
为什么git会选择stash@1
这种尴尬的命名风格?这真的很难在命令行上输入。如果我们可以输入类似git stash show -p @1
的内容会容易得多...【参考方案3】:
如果您只是在寻找一种轻量级的方法来保存当前工作副本的部分或全部更改,然后在以后随意重新应用它们,请考虑使用补丁文件:
# save your working copy changes
git diff > some.patch
# re-apply it later
git apply some.patch
我时不时想知道我是否应该为此使用 stash,然后我看到上面的疯狂之类的事情,我对我正在做的事情感到满意:)
【讨论】:
就是这样!谢谢你。我还更新了我的 .gitignore 以忽略 .patch 文件,并且我已经准备好拥有尽可能多的补丁了。 我可以看到问题背后的意图,即每次从 master 取出分支而不提交它们时应用一些本地更改。所以,也许这个问题应该得到纠正,这个答案应该被接受为解决方案。也很简单。 很好的替代 stash 我想我们可能想用git apply --3way some.patch
来扩充这个答案。这更类似于传统的git stash apply
方法。否则,冲突可能导致补丁应用失败
我不相信这对新文件有影响。【参考方案4】:
如果你觉得一个 stash 足够重要,你可以把它变成一个分支:
git stash branch <branchname> [<stash>]
来自手册页:
这将创建并签出一个名为 <branchname>
的新分支,从最初创建 <stash>
的提交开始,将 <stash>
中记录的更改应用于新的工作树和索引,然后删除 @987654325 @如果成功完成。如果没有给出<stash>
,则应用最新的。
如果您运行 git stash save
的分支已经发生了足够的变化,以至于 git stash apply 由于冲突而失败,这很有用。由于 stash 应用在 git stash 运行时的 HEAD 提交之上,因此它恢复了最初的隐藏状态,没有冲突。
您可以稍后将此新分支重新定位到其他地方,该地方是您藏匿时所在位置的后代。
【讨论】:
由于分支在 git 中相当便宜,所以这个建议对我最有用。 当然,但是如果您想稍后继续在不同的分支中重新应用此存储,这将无济于事,就像 OP 要求的那样。你必须挑选它的头。 @AdamDymitruk 有什么方法可以在保持存储不弹出的情况下执行此操作。 (比如git stash apply
)
奇怪的是,当我尝试这样做时,我收到一条错误消息,指出我的一个文件在签出时将被覆盖,我应该提交或存储(!)我的更改。 git stash push -m 'name'
工作。【参考方案5】:
Stash 并不是你想要的永久的东西。在提交时使用标签可能会更好。构建你想要隐藏的东西。做出承诺。为该提交创建一个标签。然后将您的分支回滚到HEAD^
。现在,当您想重新应用该存储时,您可以使用 git cherry-pick -n tagname
(-n
是 --no-commit
)。
【讨论】:
绝对喜欢这种方法,让named commit
在某个地方闲逛感觉更干净。只有轻微的烦恼是它不会在樱桃挑选时提交并停留在差异中,这意味着它需要在下一次提交期间手动而不是签入。
这是最接近的。我想我会为此做一些别名。我不喜欢将描述用作“名称”。
很遗憾它添加到索引并且您必须重置,有人应该修补--no-stage
选项!相关:***.com/questions/32333383/…【参考方案6】:
所以,我不确定为什么这个话题会引起如此多的恐慌。我可以使用name a git stash
和push
和已弃用的save
,我可以使用正则表达式通过apply
将其拉回:
git stash 方法使用一个名字来申请
$ git stash push -m "john-hancock"
$ git stash apply stash^/john-hancock
正如之前提到的,save
命令已被弃用,但它仍然有效,因此您可以在无法通过push
调用更新它们的旧系统上使用它。与push
命令不同,-m
开关不是save
所必需的。
// save is deprecated but still functional
$ git stash save john-hancock
这是 Git 2.2 和 Windows 10。
视觉证明
这是一个漂亮的动画 GIF,演示了这个过程。
事件顺序
GIF运行很快,但如果你看,过程是这样的:
ls
命令显示目录中的 4 个文件
touch example.html
添加第 5 个文件
git stash push -m "john-hancock" -a
(-a
包括未跟踪的文件)
ls
命令在隐藏后显示 4 个文件,这意味着隐藏和隐式硬重置有效
git stash apply stash^/john-hancock
运行
ls
命令列出了 5 个文件,显示 example.html 文件被带回,这意味着 git stash apply
命令有效。
这有意义吗?
坦率地说,我不确定这种方法有什么好处。给存储命名是有价值的,但不是检索。也许编写shelve and unshelve 进程的脚本会很有帮助,但按名称弹出一个存储仍然更容易。
$ git stash pop 3
$ git stash apply 3
这对我来说看起来比正则表达式更容易。
【讨论】:
您的答案是(更全面的)this one 的副本,它本身就是对现已删除的最初接受的答案的重述。 (见 cmets) 如果我发布了不正确的内容,我会感到尴尬。我看不到已删除的最初接受的答案,可能是因为它已被删除。大问题是我可以让它始终如一地工作,正如您在动画 GIF 中看到的那样。我会回到绘图板上,看看我是否能弄清楚为什么它不应该起作用。 两个存储名称相同时会发生什么? 1.两个藏匿处都适用吗? 2.recent stash 会适用吗? 3.oldest stash 将适用? 最好最全面的答案。 您是如何从终端会话中创建动画 GIF 的?【参考方案7】:使用git stash push -m aNameForYourStash
保存它。然后使用git stash list
了解您要应用的存储索引。然后使用git stash pop --index 0
弹出存储并应用它。
注意:我使用的是 git 版本 2.21.0.windows.1
【讨论】:
您的答案名义上是评分最高的答案,考虑到this comment 对git stash push,save
的当前语法【参考方案8】:
我的.zshrc
文件中有这两个函数:
function gitstash()
git stash push -m "zsh_stash_name_$1"
function gitstashapply()
git stash apply $(git stash list | grep "zsh_stash_name_$1" | cut -d: -f1)
以这种方式使用它们:
gitstash nice
gitstashapply nice
【讨论】:
什么是“zsh_stash_name_”? @SamHasler 只是一些随机的唯一字符串。如果您想知道存储是使用常规 git stash 或这些功能创建的 别名粉丝的优雅解决方案 这些太棒了! FWIW,您可以将这些直接放入 .gitconfig:stashput = "!f() git stash push -m "stash_name_$1"; ; f"
。 stashget = "!f() git stash apply $(git stash list | grep 'stash_name_$1' | cut -d: -f1); ; f"
。然后在您的 sh 配置中(例如 .bashrc 或 .bash_aliases)。 ## git stash by name. alias gsp="git stashput " alias gsg="git stashget "
。现在您可以在 CLI 上使用它,例如:prompt# gsp localchanges
。 prompt# gsg localchanges
.【参考方案9】:
这个怎么样?
git stash save stashname
git stash apply stash^/stashname
【讨论】:
It sounds like 类似的东西曾经是被接受的答案,但后来被删除了。 嗯,那为什么被删了? 我不知道,因为我没有发布答案并且没有 10,000 名声望,但我认为这与 cmets 说它不起作用有关:这是不幸的是git stash apply stash^/<regex>
不起作用(它实际上并没有搜索存储列表,请参阅accepted answer 下的 cmets)。
为了检索我去 1.git stash list
这向我显示了存储及其相关的索引号,然后我去 2.git stash apply 0
- 其中 0 是我会从第一个命令【参考方案10】:
别名
sapply = "!f() git stash apply \"$(git stash list | awk -F: --posix -vpat=\"$*\" \"$ 0 ~ pat print $ 1; exit\")\"; ; f"
用法
git sapply "<regex>"
编辑:我坚持原来的解决方案,但我明白为什么大多数人更喜欢 Etan Reisner 的版本(上图)。所以只是为了记录:
sapply = "!f() git stash apply \"$(git stash list | grep -E \"$*\" | awk \" print $ 1; \" | sed -n \"s/://;1p\")\"; ; f"
【讨论】:
使用awk -F: 'print $1'
将完全消除对 sed 的需求。另外为什么将它包装在一个函数中?并且使用 awk -F: -vpat="$*" '$0 ~ pat print $1'
也应该允许删除 grep。虽然可能需要对模式进行稍微不同的引用。
@EtanReisner:你的 sn-p 输出不止一行。
使动作print $1; exit
在第一个匹配行之后退出。
@EtanReisner:经过一些测试,我可以摆脱 sed,但 wrapper 和 grep 仍然存在。
您不需要 grep,尽管就像我说的那样,如果没有它,模式引用可能会有所不同。我假设包装器是指shell函数?你从来没有解释过为什么你认为你需要它,所以我不能评论你是否真的这样做,但我相信你很可能不会。 (您可能需要手动调用 shell 而不是直接调用 git stash 但可能甚至不需要。)【参考方案11】:
很遗憾git stash apply stash^/<regex>
不起作用(它实际上并没有搜索存储列表,请参阅accepted answer 下的 cmets)。
这里是插入式替换,通过正则表达式搜索 git stash list
以找到第一个(最近的)stash@<n>
,然后将其传递给 git stash <command>
:
# standalone (replace <stash_name> with your regex)
(n=$(git stash list --max-count=1 --grep=<stash_name> | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash show "$n" ; else echo "Error: No stash matches" ; return 1 ; fi)
(n=$(git stash list --max-count=1 --grep=<stash_name> | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash apply "$n" ; else echo "Error: No stash matches" ; return 1 ; fi)
# ~/.gitconfig
[alias]
sshow = "!f() n=$(git stash list --max-count=1 --grep=$1 | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash show "$n" ; else echo "Error: No stash matches $1" ; return 1 ; fi ; f"
sapply = "!f() n=$(git stash list --max-count=1 --grep=$1 | cut -f1 -d":") ; if [[ -n "$n" ]] ; then git stash apply "$n" ; else echo "Error: No stash matches $1" ; return 1 ; fi ; f"
# usage:
$ git sshow my_stash
myfile.txt | 1 +
1 file changed, 1 insertion(+)
$ git sapply my_stash
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: myfile.txt
no changes added to commit (use "git add" and/or "git commit -a")
请注意,系统会返回正确的结果代码,以便您可以在其他脚本中使用这些命令。这可以在运行命令后验证:
echo $?
请注意variable expansion exploits,因为我不确定--grep=$1
部分。它可能应该是--grep="$1"
,但我不确定这是否会干扰正则表达式分隔符(我愿意接受建议)。
【讨论】:
【参考方案12】:用名字保存一个 git stash
$ git stash push -m "say-my-name"
按名称执行 git stash apply
$ git stash apply stash^/say-my-name
【讨论】:
【参考方案13】:可以使用以下命令自定义评论。
PS D:\git-example> git stash -m "your comment"
列出藏匿处
PS D:\git-exapmle> git stash list
stash@0: On master: first stash
stash@1: On master: second stash
我们可以选择任何存储,我们必须通过 stash@x,下面我选择第二个存储,即 1。
PS D:\git-example> git stash pop 1
【讨论】:
这个和an earlier answer基本一样【参考方案14】:这个答案很大程度上归功于 Klemen Slavič。我本来只是对接受的答案发表评论,但我还没有足够的代表:(
您还可以添加一个 git 别名来查找 stash ref 并在其他别名中使用它来显示、应用、删除等。
[alias]
sgrep = "!f() ref=$(git --no-pager stash list | grep "$1" | cut -d: -f1 | head -n1); echo $ref:-<no_match>; ; f"
sshow = "!f() git stash show $(git sgrep "$1") -p; ; f"
sapply = "!f() git stash apply $(git sgrep "$1"); ; f"
sdrop = "!f() git stash drop $(git sgrep "$1"); ; f"
请注意,ref=$( ... ); echo $ref:-<no_match>;
模式的原因是不会返回一个空白字符串,这会导致 sshow、sapply 和 sdrop 以最新的存储为目标,而不是像预期的那样失败。
【讨论】:
这对我有用,而接受的答案似乎不起作用(请参阅我对接受的答案的推荐)【参考方案15】:别名 对于类 Unix 系统,这可能是一种更直接的语法,无需封装在函数中。 将以下内容添加到 [alias] 下的 ~/.gitconfig 中
sshow = !sh -c 'git stash show stash^/$* -p' -
sapply = !sh -c 'git stash apply stash^/$*' -
ssave = !sh -c 'git stash save "$1"' -
用法: sapply 正则表达式
示例: git sshow MySecretStash
最后的连字符表示从标准输入中获取输入。
【讨论】:
【参考方案16】:使用一个小的 bash 脚本来查找存储的编号。称之为“gitapply”:
NAME="$1"
if [[ -z "$NAME" ]]; then echo "usage: gitapply [name]"; exit; fi
git stash apply $(git stash list | grep "$NAME" | cut -d: -f1)
用法:
gitapply foo
...其中 foo 是您想要的存储名称的子字符串。
【讨论】:
【参考方案17】:使用git stash save NAME
保存。
然后...您可以使用此脚本来选择要应用(或弹出)的脚本:
#!/usr/bin/env ruby
#git-stash-pick by Dan Rosenstark
# can take a command, default is apply
command = ARGV[0]
command = "apply" if !command
ARGV.clear
stashes = []
stashNames = []
`git stash list`.split("\n").each_with_index |line, index|
lineSplit = line.split(": ");
puts "#index+1. #lineSplit[2]"
stashes[index] = lineSplit[0]
stashNames[index] = lineSplit[2]
print "Choose Stash or ENTER to exit: "
input = gets.chomp
if input.to_i.to_s == input
realIndex = input.to_i - 1
puts "\n\nDoing #command to #stashNames[realIndex]\n\n"
puts `git stash #command #stashes[realIndex]`
end
我喜欢能够看到存储的名称并进行选择。我也使用 Zshell,坦率地说不知道如何使用上面的一些 Bash 别名;)
注意:正如凯文所说,you should use tags and cherry-picks instead.
【讨论】:
git stash save
已弃用,取而代之的是 git stash push
。【参考方案18】:
这是使用 PowerShell 完成此任务的一种方法:
<#
.SYNOPSIS
Restores (applies) a previously saved stash based on full or partial stash name.
.DESCRIPTION
Restores (applies) a previously saved stash based on full or partial stash name and then optionally drops the stash. Can be used regardless of whether "git stash save" was done or just "git stash". If no stash matches a message is given. If multiple stashes match a message is given along with matching stash info.
.PARAMETER message
A full or partial stash message name (see right side output of "git stash list"). Can also be "@stashN" where N is 0 based stash index.
.PARAMETER drop
If -drop is specified, the matching stash is dropped after being applied.
.EXAMPLE
Restore-Stash "Readme change"
Apply-Stash MyStashName
Apply-Stash MyStashName -drop
Apply-Stash "stash@0"
#>
function Restore-Stash
[CmdletBinding()]
[Alias("Apply-Stash")]
PARAM (
[Parameter(Mandatory=$true)] $message,
[switch]$drop
)
$stashId = $null
if ($message -match "stash@")
$stashId = $message
if (!$stashId)
$matches = git stash list | Where-Object $_ -match $message
if (!$matches)
Write-Warning "No stashes found with message matching '$message' - check git stash list"
return
if ($matches.Count -gt 1)
Write-Warning "Found $($matches.Count) matches for '$message'. Refine message or pass 'stash@N' to this function or git stash apply"
return $matches
$parts = $matches -split ':'
$stashId = $parts[0]
git stash apply ''$stashId''
if ($drop)
git stash drop ''$stashId''
More details here
【讨论】:
【参考方案19】:在我的鱼壳里
function gsap
git stash list | grep ": $argv" | tr -dc '0-9' | xargs git stash apply
end
使用
gsap name_of_stash
【讨论】:
【参考方案20】:git stash apply
也适用于stash@0
以外的其他引用。所以你可以使用普通的标签来获得一个持久化的名字。这还有一个好处是你不会意外git stash drop
或git stash pop
它。
所以你可以像这样定义一个别名pstash
(又名“持久存储”):
git config --global alias.pstash '!f() git stash && git tag "$1" stash && git stash drop; ; f'
现在您可以创建一个标记的存储:
git pstash x-important-stuff
和show
和apply
像往常一样再次:
git stash show x-important-stuff
git stash apply x-important-stuff
【讨论】:
这是迄今为止对我来说最方便的解决方案,因为我不介意在我的任何存储库中添加一些额外的标签。【参考方案21】:在这里聚会迟到了,但是如果使用 VSCode,一个快速的方法是打开命令面板(CTRL / CMD + SHIFT + P)并输入“Pop Stash”,您将能够检索您的按名称存储,无需使用 git CLI
【讨论】:
【参考方案22】:这里有很多答案,但我相信 OP 所追求的所需等效功能并没有被任何一个答案或评论完全封装。
通过将 git add
、git diff
、git rm
和 git reset
组合到自定义 git 命令中,我们可以快速将更改聚合到补丁文件中,稍后我们可以通过名称轻松引用:
这里是上面custom git command 中使用的命令(也可用as a gist) - 请注意--hard
标志的使用 这将重置您当前的分支并删除所有更改到您的本地文件:
#!/usr/bin/env bash
if [ $# -eq 1 ] ; then
NAME=$1
else
echo "Please pass exactly one argument, which is the name of the patch file"
exit 1
fi
git add .
# if previous patch file with the same name exists untrack it
if [ -f "$NAME.patch" ] ; then
git rm --cached $NAME.patch
fi
# warning: this will diff all changes into a file called NAME.patch and do a hard reset of the current branch
git diff --staged > $NAME.patch
git reset --hard $HEAD
您现在只需执行git bottle hello
即可创建hello.patch
文件。
使用git apply hello.patch
应用它
诀窍是首先跟踪所有文件,以便我们可以利用 diff 命令的staged (or cached) option。通过一些调整,您可以扩展自定义命令以在工作目录之外的某个位置输出补丁文件,即可能在硬盘驱动器上的某个补丁文件夹中,或者您可以更新您的 .gitignore
文件以忽略它。
归功于:this answer激发了我自己的灵感,它描述了补丁方法,但忽略了新文件中的更改将被排除在差异显示之外。
警告:由于此命令依赖于git add
,它不会限制 git 已经忽略的任何文件的更改。
【讨论】:
此答案的先前版本未检查旧补丁文件是否存在,并使用git rm
安全地取消跟踪和删除文件。将其添加到以确保我们不会意外跟踪和暂存补丁文件,然后通过硬重置立即将其删除
很酷的 hack 我可能会使用它 - 但是您是否有理由远离 OP 询问的实际藏匿处?【参考方案23】:
我不认为有办法 git pop 一个 stash 的名字。
我已经创建了一个 bash 函数来完成它。
#!/bin/bash
function gstashpop
IFS="
"
[ -z "$1" ] && echo "provide a stash name"; return;
index=$(git stash list | grep -e ': '"$1"'$' | cut -f1 -d:)
[ "" == "$index" ] && echo "stash name $1 not found"; return;
git stash apply "$index"
使用示例:
[~/code/site] on master*
$ git stash push -m"here the stash name"
Saved working directory and index state On master: here the stash name
[~/code/site] on master
$ git stash list
stash@0: On master: here the stash name
[~/code/site] on master
$ gstashpop "here the stash name"
希望对你有帮助!
【讨论】:
【参考方案24】:对于除了存储创建之外的所有内容,我会通过引入 fzf 作为依赖项来提出另一种解决方案。我建议您花 5 分钟时间了解一下,因为它总体上可以极大地提高生产力。
无论如何,他们的examples page 提供了隐藏搜索的相关摘录。更改 scriptlet 以添加其他功能(如存储应用程序或删除)非常容易:
fstash()
local out q k sha
while out=$(
git stash list --pretty="%C(yellow)%h %>(14)%Cgreen%cr %C(blue)%gs" |
fzf --ansi --no-sort --query="$q" --print-query \
--expect=ctrl-d,ctrl-b); do
mapfile -t out <<< "$out"
q="$out[0]"
k="$out[1]"
sha="$out[-1]"
sha="$sha%% *"
[[ -z "$sha" ]] && continue
if [[ "$k" == 'ctrl-d' ]]; then
git diff $sha
elif [[ "$k" == 'ctrl-b' ]]; then
git stash branch "stash-$sha" $sha
break;
else
git stash show -p $sha
fi
done
【讨论】:
【参考方案25】:这里是我的社区别名:wip
和 wip-apply
。
当您git wip
时,您还存储未跟踪的文件并返回到之前的提交状态。
git config --global alias.wip '!f() git stash save $1 -u ; ; f'
git config --global alias.wip-apply '!f() temp=$(git stash list | cut -d ':' -f 3 | grep -n -w $1 | cut -d ':' -f 1) ; stashnum=$((temp-1)) ; stashname=$(echo stash@$stashnum) ; git stash apply $stashname ; ; f'
用法:
git wip "featureA"
git wip-apply "featureA"
【讨论】:
【参考方案26】:这是我做的一个快速设置,对我有用,希望它也对你有用:
假设我的 package.json 项目文件中有一个自定义/本地脚本,我不想推送到远程仓库
// ... package.json stuff
"scripts":
"custom": "ts-node a_ts_test_file.ts"
所以我决定在我想要推送我的分支或类似的东西时存储这个更改,然后弹出存储直到我的下一个“git push”。
所以...
-
你需要创建一个新的 git 别名:
# dev is the "stash tag"
# To stash current working directory
git config --global alias.sh "stash -m 'dev'"
-
如果您使用的是 zsh 或 oh-my-zsh,则需要编辑您的
~.bashrz
或 ~.zshrc
,添加以下别名:
# Apply stash "tagged" $(X) where X is substring of "git stash list" output filtered by output that contains "dev".
# I didn't use git stash apply because "dev" tag isn't unique, so it's a need to pop the stash and ensure to create a new one alias set on first step
alias gitsh="git stash pop $(git stash list | grep 'dev' | cut -d ':' -f 1) || echo 'nope'"
-
享受?
使用标签“dev”推送您的工作目录:git sh
要从标记为“dev”的 stash 中提取您的 stashed:sitsh
(这是我在五分钟内制作的一个小脚本,对我有用,如果它失败......修复它!?)
【讨论】:
以上是关于如何在 git 中按名称命名和检索存储?的主要内容,如果未能解决你的问题,请参考以下文章