如何保存/应用带有名称的存储?我不想在git存储列表中查找它的索引号。我尝试了git存储保存“my_stash_name”,但这只会更改存储描述,相应的git-apply“my_stash_name”不起作用。
当前回答
这个呢?
git stash save stashname
git stash apply stash^{/stashname}
其他回答
如果你觉得足够重要,你可以把一个藏起来的东西变成树枝:
git stash branch <branchname> [<stash>]
从手册页:
这将从最初创建<stash>的提交开始创建并签出一个名为<branchname>的新分支,将<stash’中记录的更改应用于新的工作树和索引,然后如果成功完成,则删除<stash〕。当没有给出<stash>时,应用最新的一个。
如果运行git-stash-save的分支发生了足够的变化,导致git-stash-apply由于冲突而失败,那么这非常有用。由于在运行git stash时,stash应用于HEAD提交之上,因此它恢复了最初的stash状态,没有冲突。
您可以稍后将此新分支重新放置到其他位置,该位置是您存放时所在位置的后代。
使用一个小型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是所需存储的名称的子字符串。
在我的鱼壳里
function gsap
git stash list | grep ": $argv" | tr -dc '0-9' | xargs git stash apply
end
use
存储的gsap名称
gitstash-apply还可以与stash@{0}以外的其他ref一起使用。因此,您可以使用普通标记来获取持久名称。这还有一个好处,那就是你不会不小心把git藏起来或者把git隐藏起来。
因此,您可以这样定义别名pstash(又名“持久存储”):
git config --global alias.pstash '!f(){ git stash && git tag "$1" stash && git stash drop; }; f'
现在,您可以创建标记的存储:
git pstash x-important-stuff
并照常显示和应用:
git stash show x-important-stuff
git stash apply x-important-stuff
这是使用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 "@stash{N}" 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''
}
}
此处显示更多详细信息
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别