如何让Git cherry-pick不提交且不将变更加入暂存区?
解决Git Cherry-Pick不提交也不进暂存区的问题
问得好!Git确实没有提供--no-stage这种直接的选项给cherry-pick,但我们有两种非常简洁的方式来实现你想要的效果——把指定提交的变更留在本地工作区,既不提交也不放进暂存区。
方法一:Cherry-Pick后一键重置暂存区
你可以把两条命令合并成一行,一次性完成操作:
git cherry-pick <hash> --no-commit && git reset
--no-commit(简写-n)会让Git把目标提交的变更应用到当前分支,但不会自动创建新提交,同时会把这些变更加入暂存区。- 紧接着的
git reset不带任何参数时,会把所有暂存区的内容全部移回工作区,刚好达到你要的“仅在本地保留变更、不进暂存区也不提交”的状态。
方法二:直接应用补丁到工作区
如果你想全程不碰暂存区,一步到位,可以用补丁导出+应用的方式:
git diff <hash>^ <hash> | git apply -
git diff <hash>^ <hash>会生成目标提交与其父提交之间的差异补丁。git apply -会把这个补丁直接应用到你的工作目录中,全程不会修改暂存区,也不会创建任何提交。
注意:如果目标提交是仓库的根提交(没有父提交),把
<hash>^换成--root即可:git diff --root <hash> | git apply -
内容的提问来源于stack exchange,提问作者Mayday
相关产品推荐
相关产品推荐

