来自git stash

时间:2016-11-14 23:04:20

标签: git

处理一些代码,并希望保存一部分代码以供日后使用。假设在两个变更集之间不会发生太多变化,我决定git stash -p。大约一个小时后才意识到它会毛茸茸,而且不想松开我的藏匿处。所以我想用它创建一个分支。

不幸做一个简单的

git branch stash-branch stash@{0}

没有产生我想要的结果。看着树,我看到了

*   99b0d0c (refs/stash, stash-branch) WIP on my-dev-branch: 2af1f8b PARTIAL but it builds again!
|\
| * d45ddae index on my-dev-branch: 2af1f8b PARTIAL but it builds again!
|/
* 2af1f8b (HEAD -> my-dev-branch) PARTIAL but it builds again!
| * d8bb99f (origin/my-dev-branch) PARTIAL but it builds again!
|/
* fe1296d PARTIAL (doesn't compile)

我期望stash-branch出现在d45ddae上,但没有做到这一点。哦,好吧,我会四处寻找另一种方法来自动完成这项工作。

经过一番搜索后,找不到任何东西。所以我的问题是:是否有一种自动方式在stash@{N}的提示之前引用提交?我所有的努力都会导致新制作的分支指向my-dev-branch

编辑:上面的git branch命令不正确。已经纠正。

另外,据我所知git stash branch总是自动检出分支。在这种情况下,我只想在现有的sha。上创建一个新分支。

基本上,我想在d45ddae处创建一个新的分支,而不是检查它。

2 个答案:

答案 0 :(得分:1)

您描述"从藏匿处创建分支",其完成:

git stash branch <branchname> [<stash>]

但你显示为一个命令:

git branch stash@{0}

(缺少分支名称,并运行git branch命令而不是git stash命令。)

想要的似乎是git stash branch,例如:

git stash branch newbr

(默认使用主存储,stash@{0})。这会创建一个新分支,指向保存存储时当前的提交,然后应用存储(使用git stash apply),然后成功 - 应该为&#34 ;总是&#34; -drops藏匿。

答案 1 :(得分:0)

直到现在,我完全放弃了解决方案。这很简单。基本上我想解决藏匿处的第二个父母。

*   99b0d0c (refs/stash, stash-branch) WIP on my-dev-branch: 2af1f8b PARTIAL but it builds again!
|\
| * d45ddae index on my-dev-branch: 2af1f8b PARTIAL but it builds again!
|/
* 2af1f8b (HEAD -> my-dev-branch) PARTIAL but it builds again!

因此,为了创建具有正确变更集的新分支,所有需要完成的操作都是遵循第二个父变换。即。

git branch stash-branch stash@{0}^2

结果如下:

*   99b0d0c (refs/stash) WIP on my-dev-branch: 2af1f8b PARTIAL but it builds again!
|\
| * d45ddae (stash-branch) index on my-dev-branch: 2af1f8b PARTIAL but it builds again!
|/
* 2af1f8b (HEAD -> my-dev-branch) PARTIAL but it builds again!

现在,你为什么要这样做?假设已编辑了多个文件,并且只添加了其中一些文件。请采取以下措施:

$ git status
On branch my-dev-branch
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   Makefile

Changes not staged for commit:

        modified:   README.md

现在运行以下命令,看看我第一次看到的意外输出:

$ git show stash@{0}
commit 2cbcfa95123ab775107311286418f95180a0ca55
Merge: 9e620e0 26f500a
Author: Trevor Norris <xxxxxxxx@gmail.com>
Date:   Tue Nov 15 11:51:09 2016 -0700

    WIP on my-dev-branch: 9e620e0 working on stuff

diff --cc README.md
index d15916e,d15916e..1cf2d60
--- a/README.md
+++ b/README.md
@@@ -2,6 -2,6 +2,8 @@@



++FOO BAR
++

缓存的更改在哪里?他们坐在分支提交到存储(可以通过git show stash@{0}^2验证这一点)。这意味着可以创建一个新的分支,而无需检查它,只指向缓存的更改:

git branch cached-changes stash@{N}^2