git - 使用 Git 部分挑选提交

标签 git git-cherry-pick

我在 2 个不同的分支上工作:发布开发

我注意到我仍然需要将提交给 release 分支的一些更改集成回 development 分支。

问题是我不需要所有的提交,只需要某些文件中的一些大块头,所以一个简单的

git cherry-pick bc66559

不成功。

当我做一个

git show bc66559

我可以看到差异,但真的不知道将其部分应用到我当前工作树的好方法。

最佳答案

你在这里想要的核心是git add -p ( -p--patch 的同义词)。这提供了一种添加内容的交互式方式,让您决定每个大块是否应该进入,甚至可以让您在必要时手动编辑补丁。

与 cherry-pick 结合使用:

git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset                   # unstage the changes from the cherry-picked commit
git add -p                  # make all your choices (add the changes you do want)
git commit                  # make the commit!

(感谢 Tim Henigan 提醒我 git-cherry-pick 有一个 --no-commit 选项,感谢 Felix Rabe 指出你需要 git reset 。如果你只想留下一些东西提交,您可以使用 git reset <path>... 取消暂存这些文件。)

您可以提供到 add -p 的特定路径如有必要。如果您从补丁开始,您可以替换 cherry-pickapply .


如果你真的想git cherry-pick -p <commit> (该选项不存在),您可以使用

git checkout -p <commit>

这会将当前提交与您指定的提交进行比较,并允许您单独应用该差异中的 block 。如果您正在 pull 入的提交在您不感兴趣的部分提交中存在 merge 冲突,则此选项可能更有用。(但是请注意,checkoutcherry-pick 不同:checkout 尝试应用<commit> 的全部内容,而 cherry-pick 应用指定提交与其父项的差异。这意味着 checkout 可以应用的不仅仅是该提交,这可能比您想要的更多。)

关于git - 使用 Git 部分挑选提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526044/

相关文章:

GIT:将本地更改添加到非当前分支

git - 将多个 gitignore 文件包含在一个文件中

git - 在使用 Git 或 SSH 复制/远程登录等时,我们应该重复使用相同的 SSH key 还是每次都创建新 key ?

git - Git Cherry-Pick 和 Git Revert 有什么区别?

Git:如何在没有以前所有历史记录的情况下挑选提交

git - 如何挑选特定作者的提交范围?

git - 提示 : after resolving the conflicts, 标记更正的路径

git - 择优选择后的 Azure DevOps Pull 请求

git - 当我推送到一个有效的 SSH 地址时,为什么 git 无法解析主机名?

git - 在不检查分支的情况下查看 git diff?