这是过去两周内分支frontend
上的管道。
| Stash@{3}
是自Stash@{1}
以来的所有代码(不包括两个小提交)
|微小的承诺
|微小的承诺
|两周前大量提交,现已重新定位并转移到Stash@{1}
我的工作树目前很干净
Stash@{1}
是两周前批量提交一般开发代码的内容(这应该首先被隐藏起来)。这个提交被撤消并转移到藏匿处
Stash@{3}
是自Stash@{1}
以来该树上的最新工作(减去已经提交的几项更改)。
我需要在工作树中将这两个存储块组合在一起,这样我就可以从这个巨大的工作池中做出一些提交。
我跑了git stash apply stash@{1}
然后我尝试了:
git stash apply stash@{3}
git stash show -p | git stash apply stash@{3}
但在这两种情况下我都得到'脏工作树'。我如何将这项工作合并在一起?由于stash@{3}
较新,我希望它在有冲突的地方取代stash@{1}
。
答案 0 :(得分:91)
它有点牵扯,但这几乎总是有效:
弹出第一个藏匿
$ git stash pop
暂时提交第一个存储的更改
$ git add . && git commit -am 'WIP'
弹出第二个藏匿
$ git stash pop
撤消临时提交,保留其引入的更改
$ git reset --soft HEAD^
答案 1 :(得分:42)
如果工作树中没有与已修改文件冲突,则只能应用存储,因此,首先,确保git status
中没有已修改的文件,如果有,则提交它们。然后做:
git stash apply stash@{1}
git commit -a
# Enter your commit message
git stash apply stash@{3}
然后,您可以进行新的提交,也可以修改前一个提交以进行组合。每次应用后,您可能需要解决合并冲突。
此外,如果您决定使用git stash pop
而不是apply
,请注意stash@{3}
将成为stash@{2}
,因为第一个被弹出。
答案 2 :(得分:12)
更好的方法是使用git stash show -p stash@{whatever} > stash-{whatever}.diff
,然后为每个人使用git apply
。
答案 3 :(得分:2)
我遇到了类似的问题并且解决了这个问题。
使用git stash pop
应用其中一个藏匿处。然后使用git diff -p > ../stash.diff
创建此存储的修补程序。然后,您可以重置工作树(或再次存储更改),并使用git stash pop stash@{1}
弹出另一个存储。如果您此时应用补丁,则可以“合并”两个不同的藏匿处。
您可能需要解决一些冲突。如果一切顺利,您可以放弃隐藏的更改。
答案 4 :(得分:2)
这对我有用。
暂存当前更改(如果未暂存,则跳过此步骤)
git add .
应用你想要的藏匿处
git stash apply stash@{0}
暂存当前更改
git add .
或 git add <stashed_filename>
多次重复第 2 步和第 3 步
然后取消一切
git reset
完成!