Git cherry-pick 和 rebase 的混合用法

之前在 git 上遇過一個問題

A-B  master
   \
    C-D-E-F-G topic


問題是,我只想把 D,F 加到 master ,其他的留在 topic ,而且又不想把 history 搞得很亂,最好就變成這個樣子:

A-B-D-F  master
       \
        C-E-G topic

有甚麼好的作法?

原來答案相當簡單。

$ git checkout master
$ git cherry-pick D
$ git cherry-pick F
$ git checkout topic
$ git rebase master

就這樣。

### `git rebase` 的使用 `git rebase` 是 Git 中用于重新应用提交到不同基点的命令。它常用于将一个分支的更改整合到另一个分支中,同时保持线性历史记录。这种操作在开发个人分支并希望将其更新到最新主分支时非常有用。 要执行 `rebase` 操作,可以使用以下命令: ```bash git checkout feature-branch git rebase main ``` 如果在 `rebase` 过程中遇到冲突,Git 会暂停并在冲突文件中标记出问题区域。解决冲突后,需要添加已解决的文件,并继续 `rebase` 流程: ```bash git add <resolved-file> git rebase --continue ``` 若想跳过当前冲突提交,可使用 `git rebase --skip`;如需取消整个 `rebase` 操作,则使用 `git rebase --abort` [^4]。 对于更复杂的场景,例如想要修改特定的历史提交或调整提交顺序,可以使用交互式 `rebase`。通过指定要编辑的提交范围来启动交互模式: ```bash git rebase -i HEAD~5 ``` 这将打开一个文本编辑器,列出最近五次的提交。在此界面中,可以通过改变每行前的操作指令(如 `pick`, `edit`, `squash` 等)来决定如何处理每个提交。 ### `git cherry-pick` 的使用 `git cherry-pick` 命令允许开发者将某个特定提交从一个分支复制到另一个分支上。这对于只希望合并部分更改而不是整个分支的情况很有帮助。 基本用法如下所示: ```bash git checkout target-branch git cherry-pick <commit-hash> ``` 这里的 `<commit-hash>` 是你想转移的那个提交的唯一标识符。一旦运行了这个命令,Git 将尝试将该提交引入当前检出的分支,并创建一个新的提交。如果存在冲突,同样需要手动解决,并且完成之后需要运行 `git add` 来标记冲突已解决,然后使用 `git cherry-pick --continue` 继续操作 [^3]。 ### 注意事项与最佳实践 - 在共享仓库或者公共分支上进行 `rebase` 操作应当谨慎,因为这会重写项目历史,可能导致其他协作者的工作出现问题。 - 使用 `cherry-pick` 时要注意确保所选提交是独立的,不会依赖于未被选取的其他更改,否则可能会导致构建失败或功能异常。 - 当面对简单的一对一提交迁移时,优先考虑使用 `cherry-pick`;而在需要维护清晰线性历史的情况下,尤其是个人开发分支向主干合并代码时,推荐使用 `rebase` [^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值