git 提交的进阶操作

饭宝  金牌会员 | 2024-7-20 00:54:06 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 849|帖子 849|积分 2547


cherry-pick

cherry-pick 是 Git 中的一种操作,允许你从一个分支中选择特定的 commit,并将其应用到另一个分支。它的主要用途是将特定的更改引入到其他分支,而无需归并整个分支汗青。这在修复 bug 或者移植某些功能时特殊有用。
cherry-pick 的使用场景

  • Bug 修复: 比方,你在 feature 分支上修复了一个 bug,须要将这个修复应用到 main 分支。
  • 功能移植: 你开辟了一些有用的功能在一个分支上,但希望在另一个特性开辟的分支中使用这些功能。
  • 回滚特定提交: 某些提交被错误地推送,你可以在一个新的分支上 cherry-pick 须要保留的更改。
    cherry-pick 的根本使用
    假设你有如下的 Git 分支结构:
  1. A---B---C---D---E  (main)
  2.          \
  3.           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个版本
  1. `$ git rebase -i HEAD~3`
复制代码
归并指定版本号(不包含此版本)
  1. $ 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
  1. $ git log --oneline
  2. 291e427 update website
  3. 8c8f3f4 update website
  4. 1693a6f update clear-logs.sh version
  5. 3759b84 update clear-logs.sh
  6. fc36a2a add links
  7. 1d795e6 fix && update clear-logs.sh 0.0.2
  8. 9536dab add dingtalk script
  9. 3a51aaa fix shellcheck problem
  10. 2db6ad3 add clear logs scripts
  11. e57b0e6 fix && add batch del
  12. 17cb931 fix && add batch del
  13. cf7e875 add redis script
  14. fe4bbcb Initial commit
复制代码
编辑归并版本
指定要归并版本号,cf7e875 不加入归并,进入 vi 编辑器
  1. [/code] [code]$ git rebase -i cf7e875
  2. pick 17cb931 fix && add batch del
  3. pick e57b0e6 fix && add batch del
  4. pick 2db6ad3 add clear logs scripts
  5. pick 3a51aaa fix shellcheck problem
  6. pick 9536dab add dingtalk script
  7. pick 1d795e6 fix && update clear-logs.sh 0.0.2
  8. pick fc36a2a add links
  9. pick 3759b84 update clear-logs.sh
  10. pick 1693a6f update clear-logs.sh version
  11. pick 8c8f3f4 update website
  12. Rebase cf7e875..291e427 onto cf7e875 (10 commands)
  13. #Commands:
  14. #p, pick = use commit
  15. ...
复制代码
编辑 commit
  1. #把 e57b0e6 合并到 17cb931,不保留注释;把 1693a6f 合并到 3759b84
  2. pick 17cb931 fix && add batch del
  3. f e57b0e6 fix && add batch del
  4. pick 2db6ad3 add clear logs scripts
  5. pick 3a51aaa fix shellcheck problem
  6. pick 9536dab add dingtalk script
  7. pick 1d795e6 fix && update clear-logs.sh 0.0.2
  8. pick fc36a2a add links
  9. pick 3759b84 update clear-logs.sh
  10. s 1693a6f update clear-logs.sh version
  11. pick 8c8f3f4 update website
复制代码
:wq 保存
进入注释页面
:wq保存
强制推送 (必须)
  1. git push --force
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表