我想将git stash中的一些更改应用于一个提交,将其余更改应用于另一个提交。
我想将git stash中的一些更改应用于一个提交,将其余更改应用于另一个提交。
git checkout stash@{0} -- <filename>
您也可以使用列表或文件名的通配符来执行此操作。
看起来你可以使用 git checkout -p
命令与一个储藏的引用一起使用,比如 stash@{0}
。这样可让你逐个选择从储藏中应用到你的工作树中的内容。
当你完成使用 git checkout -p
命令后,你所接受的更改将已经被应用到你的工作树中并添加到缓存/索引中,准备提交。你可以多次使用 git checkout -p stash@{0}
命令,在沿途选择你想要的补丁并进行任意次数的提交。
只针对您想要更改的文件应用修补程序。
git show --first-parent stash@{0} -- <file(s) in question> | git apply
git show -m stash...
)才能输出一个git apply
可以理解的差异。如果没有这个选项,git apply
会产生“错误:无法识别的输入”。 - Andrew France-m
在 git-show
的 man 页面的选项列表中并不存在,但在 combined diff format 部分简要提到了它。对我来说,为什么它有效并不清楚,抱歉! - Andrew France-m
是用于git stash show
命令的(具有与git diff
相同的选项),而不是用于git show stash
命令。 - user2543253--first-parent
,它就能正常工作了。回答已更新。 - Mortgit stash pop
...在补丁模式下使用git add
...
git add -p
...然后提交该更改...
git commit -m "Partial stashed commit"
在没有阅读文档的情况下,这是我脑海中迅速想到的。Leo的答案有更好的方法来实现此目的。
git stash --keep-index
来实现这一点。 - acjay