Cherry-pick 在 Git 中指的是将一个分支的某些提交应用到另一个分支。如果你犯了一个错误,把某个改动提交到了错误的分支,但又不想合并整个分支。你可以恢复该提交,并将其应用于另一个分支。
cherry-pick的主要动机是应用一些现有的提交所带来的变化。cherry-pick看的是版本库历史中的前一次提交,并将上次提交中的改动更新到当前工作树上。这个定义很直接,但当有人试图偷梁换柱,甚至从另一个分支偷梁换柱时,情况就复杂了。
Cherry-pick是一个有用的工具,但总是它不是一个好的选择。它可能会导致重复提交和其他一些情况,在这些情况下,其他的合并会比樱桃摘取更受欢迎。在少数情况下,它是一个有用的工具。它与不同的方法,如合并和重定位命令形成对比。合并和重做通常可以在另一个分支中应用许多提交。
为什么使用Cherry-Pick
假设你正在与一个团队的开发人员一起工作,进行一个中等规模的项目。另一个团队成员提出了一些修改意见,你想把其中的一部分应用到你的主项目中,而不是全部。由于管理几个 Git 分支之间的修改会成为一项复杂的任务,而且你也不想把整个分支合并到另一个分支。你只需要挑选一两个特定的提交。从其他分支中挑选一些改动到主项目分支中,这叫做 “挑拣”。
在一些情况下,你可以偷梁换柱。
情景1:意外地在一个错误的分支中提交。
Git cherry-pick 可以帮助应用那些不小心在错误的分支中做出的修改。假设我想在主分支做一个提交,但由于错误,我们在其他分支做了提交。请看下面的提交。
在上面的例子中,我想为主分支做一个提交,但不小心在新分支中做了。为了把新分支的所有改动都放到主分支,我们将使用 git pull,但对于这个特殊的提交,我们将使用 git cherry-pick 命令。请看下面的输出。
在给出的输出中,我使用了 git log 命令来检查提交历史。在主干分支上复制你想做的特定提交ID。现在切换到主干分支,在那里摘取它。请看下面的输出。
语法:
$ git cherry-pick <commit id>
输出:
从给定的输出中,你可以看到我用 git cherry-pick 命令粘贴了提交的 ID,并将其提交到我的主分支。你可以通过 git log 命令查看。
情景2:做了另一个团队成员提议的修改。
挑剔的另一个用途是做另一个团队成员提议的修改。假设我的一个团队成员在主项目中做了任何修改,并建议在主项目中做。你可以在审查后愉快地挑选它。
cherry-pick 用法
- 它是一个方便的团队协作工具。
- 在修复错误的情况下,这是必要的,因为错误是在开发分支中与他们的提交一起修复和测试的。
- 它主要用于撤消修改和恢复丢失的提交。
- 你可以通过使用git cherry-pick而不是其他选项来避免无用的冲突。
- 当由于各分支中的版本不兼容而无法进行全分支合并时,它是一个有用的工具。
- git cherry-pick用于访问引入到子分支的修改,而不改变该分支。