是否有用于指定git <stash>的快捷方式格式?例如藏匿@ {3} </藏匿>

时间:2013-11-22 20:00:03

标签: git version-control

是否有指定git <stash>的快捷方式格式?例如stash@{3}

像:

git apply @3

而不是:

git apply stash@{3}

我在man文件中没有看到任何内容:

  

当没有&lt; stash&gt;给出了stash @ {0},否则&lt; stash&gt;   必须是表格的参考              藏匿@ {&LT;修改&GT;}

2 个答案:

答案 0 :(得分:2)

实际上,手册页有一点:你可以给任何“足够藏匿”的说明符。根据定义,实际隐藏引用(如stashstash@{3})总是“隐藏”。但是,$REV所在的任何对象名称都可以:

  • $REV^2存在
  • $REV$REV^1$REV:$REV^1:$REV^2:均可解析

被认为是藏匿处。冒号后缀将提交ID转换为树ID(确保它存在),并且:

  • 存储本身就是ID $REV解析到
  • 的任何ID
  • 工作树提交是$REV
  • “base”提交是$REV^1
  • 工作树树为$REV:
  • 基础树是$REV^1:
  • 索引树为$REV^2:

如果$REV^3存在,则是未跟踪/忽略的文件提交,其树为$REV^3:

这意味着git stash会认为任何“真正的”合并提交都是存储。 (但将它们用作藏匿处充其量是奇怪的。:-))

如果您希望稍后可以通过短名称命名已保存的存储,则可以为其指定其他名称,例如标记名称:

git tag foo stash@{3}

请注意,这会复制stash@{3},而不是名称:如果您下次推送另一个存储,则提交(现在由标记引用)将与stash@{4}匹配。您可以使用git rev-parse

来查看此内容
git rev-parse foo; git rev-parse stash@{3}
在你藏匿新东西之前,

将两次打印相同的巨型SHA-1值,然后:

git rev-parse foo; git rev-parse stash@{4}
在你藏匿别的东西之后,

会做同样的事情,在“藏匿堆栈”上推送另一个藏匿处。

您可以使用refs/在分支和标记空间之外创建名称(甚至完全在git update-ref之外),并且它们有效:

git update-ref refs/jinkies/scooby stash
git stash show jinkies/scooby

但我不建议“手动”这样做,这太容易搞砸了。使用标签(并命名它们以便你能够记住它们的用途,如果你在编码狂热之后数周或数月遇到剩余的藏匿标签)可能更为明智。

答案 1 :(得分:0)

实际上stash@{n} 提交对象的快捷方式。在我的回购中,我这样做了:

git show stash@{1}

amd我得到了这个:

commit 24774ab81ad6c8f0b071363f62bf438572a2b286
Merge: 1c47ddf 31ae746
Author: Roberto Bonvallet <roberto@...>
Date:   Fri Oct 18 13:15:44 2013 -0300

因此,在这种情况下,stash@{0}24774ab81ad6c8f0b071363f62bf438572a2b286的快捷方式。