饭宝 发表于 2024-7-20 00:54:06

git 提交的进阶操作

https://i-blog.csdnimg.cn/direct/6bd70420405a4afead46abd652d46408.png
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 HEAD~3`
归并指定版本号(不包含此版本)
$ git rebase -i
指令含义:
● 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 编辑器
$ 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保存
强制推送 (必须)
git push --force

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: git 提交的进阶操作