当我隐藏更改时,如何判断我所处的分支?

时间:2014-07-23 18:31:24

标签: git git-stash

我知道git stash show -p stash@{0}给保存到该存储条目的更改日志,但是我想知道在进行这些更改时我所处的分支。这对于许多场景非常有用:

  • 清理我的藏匿栈
  • 当回到一个旧问题(因此也就是旧分支)时,我把这些变化藏起来,想当时我能够很快回到问题并解除破坏,但最终被拉到其他问题上(s)很长一段时间。我发现自己在想“我觉得我为此隐藏了变化,但我不确定,如果是这样,他们会在藏匿堆栈中输入哪些内容。”

2 个答案:

答案 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;变化,他们只是自动变基。