git rebase/cherry-pick: 合并最近的 message
想将项目中的多条提交 message 合并成1条
现状
可能在未提前之前就需要合并,可以使用: git log --oneline -20 查看最近的 log
也可以用这个命令: git log --pretty=oneline
步骤
- 打开终端或命令提示符,并导航到你的Git仓库所在的目录。
- 确保你在要进行rebase的分支上。如果不是,请切换到该分支。
- 运行以下命令来开始rebase过程,将<short-hash>替换为你最近提交的短哈希:
- 在文本编辑器中,你将看到一个以"pick"开头的列表,每一行代表一个提交。
- 将第一个提交保留为"pick",而将其余的提交的"pick"替换为"squash"(或简写为"s")。
- 这将把它们合并到第一个提交中。
git rebase -i <short-hash>~
实战
- 切换到
feature/aric
自己的分支
# 找到目标的 hash<7dc9fa40803a17ca1e442bda18497066d5b3ed4e>
git rebase -i 7dc9fa40803a17ca1e442bda18497066d5b3ed4e~
# 强制提交
git push -f origin
square 报错
error: cannot 'squash' without a previous commit
vim
一般会查找2-n行记录,来做一些替换工作。
# 查找替换
:5,12s/foo/bar/g
cherry-pick
场景: 我的项目有2个重要的分支:
项目主分支: master
特别分支(为某个需求特别定制): daqiao
问题来了:
我在 master 上做了n多个修改,同样的修改,我需要在 daqiao 上再来一次。
# 由上面的 git rebase 可以得到这个hash
git checkout daqiao
git cherry-pick 4e1ec89cddf66a2edd001962f053b2eee391bcad
# 各种处理 conflict,然后 force 方式提交,当然,最好建立自己的 feature 分支比较稳妥
补充
常用的几种情况
# 查找替换,基本是第2行之后都改成s(square),第一个用 pick
:5,12s/foo/bar/g
# 在后面的message 弹框里,去掉不需要的message,用最新的 message
用法 | 代码 |
---|---|
rebase 最近2条 |
|
rebase 当前直到某个hash |
|
rebase 当前直到某个hash的前一条 |
|