git stash-如何在gi中合并多个存储

这是过去两周中分支stash@{3}上的管道。

| stash@{3}stash@{1}以来的所有代码(不包括两个微小的提交)
| 微小的承诺
| 微小的承诺
| 两周前提交了大笔费用,现已重新定基础并移至Stash@{1}

我的工作树目前很干净。
stash@{3}是两周前批量提交的一般开发代码的内容(应首先将其隐藏)。 此提交被撤消,并移至隐藏位置。
stash@{1}是自Stash@{1}(减去已落实的几个更改)以来在该树上的最新作品。

我需要将这两个存储区合并到我的工作树中,以便可以从这个庞大的工作量中进行大量提交。

我跑了stash@{3}然后尝试了:

stash@{3}
stash@{1}

但是在两种情况下我都会得到“肮脏的工作树”。 如何将这些工作合并在一起? 因为stash@{3}是较新的,所以我希望在有冲突的地方都可以取代stash@{1}

sscirrus asked 2019-11-07T05:20:51Z
4个解决方案
97 votes

这有点涉及,但这几乎总是可行的:

  1. 弹出第一个藏匿处

    $ git reset --soft HEAD^
    
  2. 从第一个存储区临时提交更改

    $ git reset --soft HEAD^
    
  3. 弹出第二个藏匿处

    $ git reset --soft HEAD^
    
  4. 撤消临时提交,保留所做的更改

    $ git reset --soft HEAD^
    
bkeepers answered 2019-11-07T05:22:30Z
45 votes

如果工作树中的已修改文件没有冲突,则只能应用存储,因此,首先,请确保git stash pop中没有已修改文件,如果存在,请提交它们。 然后做:

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}

Andrew Marshall answered 2019-11-07T05:21:23Z
12 votes

更好的方法是只使用git stash show -p stash@{whatever} > stash-{whatever}.diff,然后分别使用git apply

siride answered 2019-11-07T05:23:00Z
2 votes

我有一个类似的问题,就这样解决了。

使用git stash pop应用其中一个存储。 然后使用git diff -p > ../stash.diff创建此存储库的修补程序。然后可以重置工作树(或再次存储更改),并使用git stash pop stash@{1}弹出另一个存储库。如果此时应用修补程序,则可以“合并”两个不同的存储库 。

您可能会遇到一些冲突要解决。 如果一切顺利,则可以删除隐藏的更改。

Henridv answered 2019-11-07T05:23:46Z
translate from https://stackoverflow.com:/questions/9143865/how-to-combine-multiple-stashes-in-git