如何在git中结合多个stash

这是过去两周在分支frontend一条pipe道。

| 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}

如果在工作树中与修改过的文件没有冲突,那么只能应用一个存储,所以首先确保git status没有修改过的文件,如果存在,提交它们。 然后做:

 git stash apply stash@{1} git commit -a # Enter your commit message git stash apply stash@{3} 

然后你可以做一个新的提交,或者修改前一个来合并它们。 每次申请后,您可能需要解决合并冲突。

另外,如果你决定使用git stash pop而不是apply ,请注意,自从第一个popup后, stash@{3}将变成stash@{2}

这有点牵扯,但这几乎总是有效的:

  1. stream行第一藏匿

     $ git stash pop 
  2. 暂时从第一个存储提交更改

     $ git add . && git commit -am 'WIP' 
  3. stream行第二藏匿

     $ git stash pop 
  4. 撤销临时提交,保留引入的更改

     $ git reset --soft HEAD^ 

更好的方法是使用git stash show -p stash@{whatever} > stash-{whatever}.diff ,然后使用git apply每一个。

我有一个类似的问题,并解决这个问题。

使用git stash pop来应用其中一个git stash pop 。 然后用git diff -p > ../stash.diff创build一个这样的补丁。 然后,您可以重置您的工作树(或再次存储更改),并用git stash pop stash@{1}popup另一个stash。 如果你现在使用你的补丁,你可以“合并”两个不同的窗口。

你可能会有一些冲突要解决。 如果一切顺利,您可以放下隐藏的更改。