我试图通过一些更改来制作一个樱桃选择,但我不想在这个分支中提交它们,我只想在本地使用它们。
为此目的,我正在使用
git cherry-pick <hash> --no-commit
然而,这会自动将它们添加到舞台上,然后,我必须使用
手动重置它们git reset HEAD <files>
git是否没有选项可以让樱桃选择不提交,而不是添加到索引?
类似的东西:
git cherry-pick <hash> --no-commit --no-stage
我知道这个技巧会做我想要的,但我必须指定提交中的所有文件:
修改
也试过这个,但它也被添加到索引中。
git checkout hash -- <list of files>
这些文件可能不会共享相同的公共路径。我正在尝试自动化它
答案 0 :(得分:2)
另一种方法是使用 apply
而不是 cherry-pick
:
git show <commit> | git apply
这将应用在 <commit>
中所做的更改,但不会将它们添加到暂存或创建提交中。
答案 1 :(得分:1)
Cherry-pick在幕后进行合并操作。 Git在索引中执行合并 - 所以不,除了使用index / staging-area之外没有办法做到这一点。 (但见下文。)
如果您不想在当前分支中提交结果,只需使用其他分支(git checkout -b <newbranch>
)或分离的HEAD(根本没有分支:git checkout --detach HEAD
)。您还可以使用混合重置(lucas-reineke suggested in a comment)在当前分支中进行提交,然后将当前分支移回一个提交。这有副作用,即重置索引以匹配调整后的(后樱桃挑选)HEAD,从而使您处于最初要求的状态。
你可以使用git cherry-pick -n HEAD
后跟git reset --mixed HEAD
(没有列出路径名)来获得相同的结果:cherry-pick发生在索引中,更新工作树作为副作用,无需提交,然后重置将文件从HEAD
提交复制回索引,使工作树不受干扰。请注意,--mixed
是默认设置,因此git reset
没有--soft
或--hard
执行--mixed
即使您没有明确--mixed
(但确保你没有在命令中输入任何拼写错误是有用的。)
这些是您通常会这样做的两种方式。还有一种可能性:虽然Git有 索引 - 与存储库的主要工作树一起使用的一个显着索引 - 您可以将Git重定向到您自己的替代 index,使用GIT_INDEX_FILE
变量。您可以将其设置为尚不存在的临时文件的名称,运行git reset
以创建该临时索引文件并将其填入,然后运行git cherry-pick -n <commit>
以更新临时索引。然后,您可以取消设置GIT_INDEX_FILE
并删除临时文件。结果是一个使用临时索引而不是正常索引的cherry-pick,它将工作树文件改为副作用。 请注意,这与在普通索引中执行cherry-pick然后重置普通索引的工作量相同。但是,它可能对某些脚本化工作流有用。谨防那些失败的挑选,因此在索引中留下合并冲突!
答案 2 :(得分:0)
我能够做到这一点