git 一次应用多个存储

git apply multi stash at one time

我有两次存储,我需要一次提交两次存储。

我使用 git stash apply 应用最新的存储,但是当我再次使用它时,它抛出以下错误,

error: Your local changes to the following files would be overwritten by merge:
        library/HQ/groupsql.sql
Please commit your changes or stash them before you merge.
Aborting
The stash entry is kept in case you need it again.

如何弹出这两个存储然后提交它们。

我认为你可以做到以下几点:

// to see the list of "stashes" (like every time when stash run 'git stash' a new entry is created in the list
> git stash list

// Lest assume you need stash@{1} and stash@{3} for the sake of example

> git stash apply stash@{1} 
git commit -am "Whatever message"

> git stash apply stash@{3}
git commit --amend  // to add changes from stash3 from the previous commit

最重要的是,每个存储应用完成后都会在本地分支上生成提交,但只要更改是本地的(未推送),您就可以更改历史记录

我建议你也阅读 This thread,它包含一些巧妙的技巧,从 git 2.11 开始可用:你可以使用 git stash apply n 而不是 git stash apply stash@{n}

另一个建议:您可以使用 git stash show stash@{3} 查看存储 3 中更改了哪些文件(如果您不确定要应用哪个存储)

虽然我从未见过在一个命令中执行此操作的功能。所以现在我的答案是 "no, you can't apply multiple stashes at once"。我很高兴能得到更有经验的 git 用户的证明。

当然,我认为您无法一次性完成,除非您已准备好为此编写自己的脚本。原因是您当前的 HEAD 和两个存储区可能有重叠的更改。即使您编写了一个脚本来为您执行此操作,您也很难解决冲突,因为您的脚本不知道要保留哪些更改以及要丢弃哪些更改。所以,正确的方法是按照书上的方法来做,即:

git stash apply stash@{1}
# resolve conflicts if any
git add .
git commit -m "<commit_message>"
git stash apply stash@{2}