我知道git stash show -p stash@{0}
给保存到该存储条目的更改日志,但是我想知道在进行这些更改时我所处的分支。这对于许多场景非常有用:
答案 0 :(得分:6)
与git stash list
一起显示。在这个例子中,“on dude”显示分支dude,“on master”显示分支master。
$ git stash list
stash@{0}: WIP on dude: 7eb87fe initial
stash@{1}: WIP on master: 7eb87fe initial
此外,当你暂时放弃工作时,听起来像是在偷窃。我有另一个工作流程,我认为优于存储,我提交,然后重置它。这样,更改就在分支上,如果我放弃该分支,相关代码也会被丢弃。
# do some work on dev
git co -b dev
# temporarily abandon it
git commit -a -m'commit instead of stash'
# do other work on master
git co master
# lets resume the old work
git co dev
# un stash
git reset HEAD^
答案 1 :(得分:1)
(理想情况下,这应该是评论,但它太大了,需要太多格式化......)
请注意,分支名称(存储为默认消息的一部分)只是存储时的名称。如果您有一段暂时忽略的旧存储,则分支名称可能已移动。例如:
$ git checkout -b hack
...
$ git stash # creates "WIP on hack"
...
$ git branch -D hack # delete hack branch
...
$ git checkout -b hack
...
$ git stash list
" WIP on hack"您将在列表中看到旧 hack
分支,而不是新分支。
实际的存储引用 - 存储在stash@{4}
中的东西或任何数字 - 指向特定提交(git stash
保存的特殊特殊合并提交,我称之为{{3} })。该提交有一个父提交,它有另一个父提交,依此类推;这个父链形成git保持的提交图中的实际分支结构。分支名称就是:只是一个名称,你可以随意改变,或者用git branch -D hack
删除,但分支结构是永久性的,至少和任何git提交一样永久。 (提交保留在存储库中,只要它们可以从一些命名的起点(例如stash@{4}
)到达,即可到达。
例如,如果您重新启动了存储的分支,则存储本身指向旧(未重新分区)分支结构:
n - n <-- hack
/
* - * - * - * <-- mainline
\
o - o <-- [old hack when stash was made]
|\
i-w <-- stash@{4}
这里,藏匿的衣服挂在最后一个旧的&#34;提交o
,而已经重新定位的分支hack
现在指向最后一个&#34; new&#34;提交n
。
您当然可以将旧的藏匿袋应用或弹出到新的分支上;无论是或多或少,都是如何使用的。或者您可以使用git stash branch
将旧存储转换为自己的新分支:例如,如果您这样做:
git stash branch restore-hack stash@{4}
你会得到这张图:
n - n <-- hack
/
* - * - * - * <-- mainline
\
o - o <-- restore-hack
索引现在包含原始git stash
时包含的内容,并且工作树设置的方式与执行相同git stash
时的方式相同。 (换句话说,&#34;存储包&#34;已经解压缩到索引和工作树中。)您现在可以git add
和/或git commit
对已恢复的提交进行更多提交(旧)hack
分支,现在名为restore-hack
。
如果你发现自己有很多旧的已保存的藏匿处,你可能希望开始做真正的提交,这些提交只是为了稍后重做(正如Andreas Wederbrand在"stash bag"中所建议的那样)。我发现他们往往不那么容易混淆,我自己,以及我需要重新选择上游&#34;上游&#34;变化,他们只是自动变基。