如何在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}
。
这有点牵扯,但这几乎总是有效的:
-
stream行第一藏匿
$ git stash pop
-
暂时从第一个存储提交更改
$ git add . && git commit -am 'WIP'
-
stream行第二藏匿
$ git stash pop
-
撤销临时提交,保留引入的更改
$ 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。 如果你现在使用你的补丁,你可以“合并”两个不同的窗口。
你可能会有一些冲突要解决。 如果一切顺利,您可以放下隐藏的更改。