企业项目管理、ORK、研发管理与敏捷开发工具平台

网站首页 > 精选文章 正文

Git高级操作--Git Cherry Pick

wudianyun 2025-01-08 17:48:51 精选文章 30 ℃

git cherry-pick是一个很强大的命令,它可以将任何Git提交的内容单独拿出来,然后追加到当前HEAD快照中。比如在某一个分支中的某一次提交可以使用cherry-pick应用到另外一个分支中。git cherry-pick可以用于撤回改变。比如说某一次提交被放入了错误的分支,那么可以切换到正确的分支,然后使用cherry-pick将这次提交拿到正确的分支中。

何时使用cherry-pick

由于git cherry-pick的强大能力,反而让它在正常工作流中并不能作为最佳实践的一部分。一方面cherry-pick会造成重复的提交,另一方面很多可以使用cherry-pick的场景,使用merge也足够了。也就是说git cherry-pick只有在一小部分场景下作为便捷工具使用。

团队合作

一个团队中的成员经常会碰到这种场景:成员们各自都在开发一个功能的一部分代码,但是其中一些代码是通用的。也许一个功能涉及到新增和编辑同一个实体的功能,而这两个功能分配给了两个不同的开发人员。但实际上新增和编辑所依赖的实体数据模型是一致。这时候如果一名开发者已经完成了数据模型的定义,并进行了提交,另一名开发者完全可以使用git cherry-pick将这次提交引入到自己的开发分支。

Bug修复

任何时候发现了一个Bug,最重要的就是尽快将这个Bug修复并交付给线上的用户。比如当一个开发者在开发一个新功能时,发现了一个已经存在的Bug。这名开发者对其进行了修复并提交了这个修复。这次修复Bug的提交应该尽快直接通过cherry-pick合并到main分支,以减少对线上用户的影响。

撤销修改或者恢复丢失的提交

有时候feature分支也许因为过于陈旧所以不能合并到main分支。有时候merge request可能没有被合并就被关闭了。Git并不会丢失这些分支内的提交,所以通过使用git log和git reflog命令,可以找回这些分支中的有用提交,然后合并回主分支。

如何使用cherry-pick

为了展示如何使用git cherry-pick,我们假设有一个仓库,其中的分支状态如下:

    a - b - c - d   Main
         \
           e - f - g Feature

git cherry-pick使用方法非常直接,就像下面这样:

git cherry-pick commitSha

在此例中,commitSha就是对于这次提交的哈希串。可以使用git log获取提交对应的哈希串。假设我们这次操作的目的是希望将f这次提交引入到main分支。首先我们需要确保当前正在main分支上。

git checkout main

然后执行cherry-pick命令

git cherry-pick f

执行之后的分支状态会变成下面这样:

    a - b - c - d - f   Main
         \
           e - f - g Feature

f这次提交被成功的引入到主分支。

使用示例

git cherry-pick可以传入执行选项

-edit

传入-edit选项会在执行cherry-pick命令时允许用户定义提交信息(commit message)。

--no-commit

--no-commit选项会在执行cherry-pick时不创建新的提交,而仅仅是将目标提交的内容追加的当前分支的工作目录。

--signoff

--signoff选项会在cherry-pick的提交信息最后追加signoff签名

除此以外,git cherry-pick也接受各种合并策略作为选项。

另外,git cherry-pick在接受选项用于处理冲突,这些选项包括--abort --continue --quit

总结

cherry-pick在某些场景下是非常强大和方面的。但也不应该将其使用场景与git merge和git rebase混淆,它不是一个用于合并代码的正常工作流程。

原文地址:https://www.atlassian.com/git/tutorials/cherry-pick

最近发表
标签列表