cherry-pick
cherry-pick 是 Git 中的一种操作,允许你从一个分支中选择特定的 commit,并将其应用到另一个分支。它的主要用途是将特定的更改引入到其他分支,而无需归并整个分支汗青。这在修复 bug 或者移植某些功能时特殊有用。
cherry-pick 的使用场景
- Bug 修复: 比方,你在 feature 分支上修复了一个 bug,须要将这个修复应用到 main 分支。
- 功能移植: 你开辟了一些有用的功能在一个分支上,但希望在另一个特性开辟的分支中使用这些功能。
- 回滚特定提交: 某些提交被错误地推送,你可以在一个新的分支上 cherry-pick 须要保留的更改。
cherry-pick 的根本使用
假设你有如下的 Git 分支结构:
- A---B---C---D---E (main)
- \
- F---G---H (feature)
复制代码 你可以使用 cherry-pick 从 feature 分支上选择某个特定的 commit 并应用到 main 分支,比方将 G 应用到 main 分支。
- 切换到目的分支:
git checkout main
- 执行 cherry-pick:
git cherry-pick
比方:
git cherry-pick abc1234
其中 abc1234 是 G 的哈希值。
cherry-pick 后的办理冲突
有时 cherry-pick 会导致冲突,须要手动办理。
- 检察冲突文件:
Git 会报告哪些文件存在冲突,通常带有 conflict markers 以指示冲突内容。
- 办理冲突:
编辑冲突文件,办理冲突后标记为已办理:
git add
- 继续 cherry-pick:
冲突办理后执行:
git cherry-pick --continue
cherry-pick 常见选项
● -e 或 --edit: 允许在 cherry-pick 过程中编辑 commit 信息。
● -x: 在 commit 信息中参加原始 commit 的 hash,以便追踪来源。
● --strategy : 使用特定的 merge 计谋。
● --abort: 如果在办理冲突时感到迷失,可以使用这个下令取消 cherry-pick 操作。
● --skip: 跳过当前发生冲突的 commit 并继续 cherry-pick 操作。
归并多个commit
利用 git rebase
归并步骤
- 检察 log 记录,使用git rebase -i选择要归并的 commit
- 编辑要归并的版本信息,保存提交,多条归并会出现多次(可能会出现冲突)
- 修改注释信息后,保存提交,多条归并会出现多次
- 推送远程仓库或归并到主干分支
从HEAD版本开始往过去数3个版本
归并指定版本号(不包含此版本)
- $ git rebase -i [commitid]
复制代码 指令含义:
● p, pick = use commit
● r, reword = use commit, but edit the commit message
● e, edit = use commit, but stop for amending
● s, squash = use commit, but meld into previous commit
● f, fixup = like “squash”, but discard this commit’s log message
● x, exec = run command (the rest of the line) using shell
● d, drop = remove commit
- $ git log --oneline
- 291e427 update website
- 8c8f3f4 update website
- 1693a6f update clear-logs.sh version
- 3759b84 update clear-logs.sh
- fc36a2a add links
- 1d795e6 fix && update clear-logs.sh 0.0.2
- 9536dab add dingtalk script
- 3a51aaa fix shellcheck problem
- 2db6ad3 add clear logs scripts
- e57b0e6 fix && add batch del
- 17cb931 fix && add batch del
- cf7e875 add redis script
- fe4bbcb Initial commit
复制代码 编辑归并版本
指定要归并版本号,cf7e875 不加入归并,进入 vi 编辑器
- [/code] [code]$ git rebase -i cf7e875
- pick 17cb931 fix && add batch del
- pick e57b0e6 fix && add batch del
- pick 2db6ad3 add clear logs scripts
- pick 3a51aaa fix shellcheck problem
- pick 9536dab add dingtalk script
- pick 1d795e6 fix && update clear-logs.sh 0.0.2
- pick fc36a2a add links
- pick 3759b84 update clear-logs.sh
- pick 1693a6f update clear-logs.sh version
- pick 8c8f3f4 update website
- Rebase cf7e875..291e427 onto cf7e875 (10 commands)
- #Commands:
- #p, pick = use commit
- ...
复制代码 编辑 commit
- #把 e57b0e6 合并到 17cb931,不保留注释;把 1693a6f 合并到 3759b84
- pick 17cb931 fix && add batch del
- f e57b0e6 fix && add batch del
- pick 2db6ad3 add clear logs scripts
- pick 3a51aaa fix shellcheck problem
- pick 9536dab add dingtalk script
- pick 1d795e6 fix && update clear-logs.sh 0.0.2
- pick fc36a2a add links
- pick 3759b84 update clear-logs.sh
- s 1693a6f update clear-logs.sh version
- pick 8c8f3f4 update website
复制代码 :wq 保存
进入注释页面
:wq保存
强制推送 (必须)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |