前言
在 Git 中,git cherry-pick 是一个非常有用的命令,允许用户将其他分支上的单个提交应用到当前分支。这对于从某个分支中挑选特定的提交进行合并,或在不同分支之间传递修复和特性时尤其有用。与传统的合并操作不同,cherry-pick 是一个精确的操作,可以确保只挑选特定的提交而不会影响整个分支。
Git cherry-pick 命令允许用户将其他分支上的单个提交应用到当前分支,适用于选择性合并修复或特性。基本语法、常用选项(如 -n, -x, --continue, --abort)、执行示例及进阶用法,包括处理冲突、撤销操作等常见问题,并提供最佳实践建议,帮助用户高效管理代码版本。

在 Git 中,git cherry-pick 是一个非常有用的命令,允许用户将其他分支上的单个提交应用到当前分支。这对于从某个分支中挑选特定的提交进行合并,或在不同分支之间传递修复和特性时尤其有用。与传统的合并操作不同,cherry-pick 是一个精确的操作,可以确保只挑选特定的提交而不会影响整个分支。
本文将详细介绍 git cherry-pick 命令的作用、基本语法、常用选项、执行示例及一些进阶用法,帮助你更高效地使用这个命令进行代码管理。
git cherry-pick 命令允许你从一个分支中选择一个或多个提交,并将这些提交应用到当前分支上。它是处理分支间选择性合并的理想工具,特别适用于只需要合并某些修复或者特性的场景,而不需要合并整个分支的情况下。
git cherry-pick 是非常有用的。cherry-pick 只挑选 bug 修复的提交。git cherry-pick 的基本语法如下:
git cherry-pick <commit-hash>
<commit-hash>:指定要应用的提交的哈希值。可以通过 git log 命令查看提交历史并获取哈希值。假设你在开发过程中有一个 feature-branch,在这个分支上完成了一些功能开发,然而,你只希望将其中一个特定的提交应用到当前的 main 分支上。你可以通过以下步骤:
feature-branch 的提交历史,并找到你想要挑选的提交哈希。main 分支。git cherry-pick 命令挑选该提交。git checkout main
git cherry-pick abc1234
此命令会将 feature-branch 上的 abc1234 提交的更改合并到当前的 main 分支中。
-n 或 --no-commit 选项:暂停自动提交-n 选项可以暂停自动提交,让你在应用提交后可以修改代码,或将多个 cherry-pick 提交合并为一个提交后再提交。git cherry-pick -n abc1234
-x 选项:附加提交信息cherry-pick 时,使用 -x 选项可以将原始提交的信息(例如:cherry-picked from commit <commit-hash>)添加到新的提交消息中,帮助你追踪哪些提交是通过 cherry-pick 操作引入的。git cherry-pick -x abc1234
--continue 选项:继续合并cherry-pick 过程中遇到冲突并手动解决冲突后,使用 --continue 继续操作。git cherry-pick --continue
--abort 选项:中止合并cherry-pick 过程中遇到冲突并决定放弃操作,可以使用 --abort 来中止并恢复到之前的状态。git cherry-pick --abort
假设我们希望将 feature-branch 上的一个提交(哈希为 abc1234)应用到 main 分支上。
git checkout main
git cherry-pick abc1234
输出:
[main 9f8bdef] Commit message from abc1234
此命令会将 feature-branch 上 abc1234 提交的内容合并到当前的 main 分支,并创建一个新的提交。
-n 选项暂停提交假设你想将某个提交应用到当前分支,但在实际提交之前需要进行修改。
git cherry-pick -n abc1234
此时,提交会被应用到当前分支,但不会自动提交。你可以进行进一步修改,并手动创建提交。
输出:
[main 9f8bdef] Commit message from abc1234 (not committed yet)
-x 选项附加原始提交信息使用 -x 选项后,提交信息将包含原始提交的引用信息,帮助追踪来源。
git cherry-pick -x abc1234
输出:
[main 9f8bdef] Commit message from abc1234 (cherry picked from commit abc1234)
如果 cherry-pick 过程中出现冲突,Git 会提示你解决冲突。解决冲突后,使用 --continue 继续操作。
git cherry-pick abc1234 # 如果遇到冲突,解决冲突后 git add <resolved-files> git cherry-pick --continue
输出:
[main 9f8bdef] Commit message from abc1234 (conflict resolved)
cherry-pick 操作如果你在合并过程中决定放弃操作,可以使用 --abort 中止 cherry-pick。
git cherry-pick abc1234 # 发生冲突并决定放弃操作 git cherry-pick --abort
输出:
cherry-pick has been aborted
你可以使用 git cherry-pick 一次性应用多个提交。只需提供多个提交哈希,Git 会按顺序应用这些提交。
git cherry-pick abc1234 def5678 ghi9012
git log 查找提交哈希要选择正确的提交进行 cherry-pick,你可以使用 git log 查看提交历史,并找到你想要挑选的提交哈希。
git log
此命令会列出当前分支的提交历史,其中包含每个提交的哈希值、作者、提交日期等信息。
在应用多个提交时,有时可能会遇到已经应用过的提交。你可以使用 --skip 跳过这些已应用的提交,避免重复应用。
git cherry-pick --skip
cherry-pick 中的冲突?当 cherry-pick 时遇到冲突,Git 会停止并标记出冲突文件。你需要手动解决冲突,删除冲突标记并选择合适的修改,然后使用 git add 标记为已解决,最后继续合并。
git add <resolved-files>
git cherry-pick --continue
是的,使用 --skip 选项可以跳过已经应用的提交,而不报错。
git cherry-pick --skip
cherry-pick 操作?如果你想撤销一个已经执行的 cherry-pick,可以使用 git reset 或 git revert。
git reset --hard HEAD~1
git cherry-pick 是一个非常强大的命令,允许你从其他分支选择特定的提交,而不是合并整个分支。这对于单独提取 bug 修复、特性或其他独立提交非常有用。
-x 选项追踪来源:在执行 cherry-pick 时,建议使用 -x 选项附加原始提交信息。这有助于日后追踪哪些提交是通过 cherry-pick 操作合并进来的,特别是在多次挑选提交时,可以更清晰地了解每个提交的来源。cherry-pick 合并大范围变更:虽然 git cherry-pick 非常强大,但不应频繁用于合并大量的提交。如果你需要合并大量变更,使用 git merge 或 git rebase 可能会更高效且容易维护。cherry-pick 合并可能会遇到冲突,特别是当目标分支和源分支存在很大差异时。在解决冲突时,确保仔细检查每个文件的更改,避免不小心覆盖或丢失重要内容。cherry-pick 可以精准地挑选特定提交,但它有时会带来代码不一致的风险。在将特定提交引入目标分支时,最好确保目标分支已经包含了相关的上下文或依赖项,否则可能会导致运行时错误或功能缺失。--no-commit:-n 或 --no-commit 选项可以让你在应用提交后修改内容再提交,尽管这在某些情况下很有用,但也增加了操作的复杂性。建议在必要时才使用,并确保在合并后做好代码审查。总的来说,git cherry-pick 是一个非常灵活且强大的命令,适用于需要精确控制提交合并的场景。使用时请根据具体需求选择适当的策略,确保版本管理的清晰和高效。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online