这是过去两周分支
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}
。
有点复杂,但这几乎总是有效的:
弹出第一个藏品
$ git stash pop
暂时提交第一个存储中的更改
$ git add . && git commit -am 'WIP'
弹出第二个藏品
$ git stash pop
撤消临时提交,保留其引入的更改
$ git reset --soft HEAD^
只有在与工作树中修改的文件没有冲突的情况下才能应用存储,因此,首先确保
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}
。
这对我有用。
暂存当前更改(如果未暂存任何内容,请跳过此步骤)
git add .
应用你想要的藏品
git stash apply stash@{0}
暂存当前更改
git add .
或
git add <stashed_filename>
继续步骤2和3多次
然后取消所有内容
git reset
完成!
更好的方法是只使用
git stash show -p stash@{whatever} > stash-{whatever}.diff
,然后对每个都使用 git apply
。
我也有类似的问题,是这样解决的。
使用
git stash pop
应用其中一个藏品。然后使用 git diff -p > ../stash.diff
创建此存储的补丁。然后,您可以重置工作树(或再次存储更改),并使用 git stash pop stash@{1}
弹出其他存储。如果您此时应用补丁,您可以“合并”两个不同的存储库。
您可能会遇到一些冲突需要解决。如果一切顺利,您可以删除隐藏的更改。