处理一些代码,并希望保存一部分代码以供日后使用。假设在两个变更集之间不会发生太多变化,我决定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
处创建一个新的分支,而不是检查它。
答案 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