当git只想合并部分部分commit

本文讲述了在Git中处理开发和生产环境分支需求差异的问题,介绍如何从B分支选取特定commit并将其合并到A分支,以便于管理和控制版本发布。

一、背景

我们在工作学习中一把会用到git。可能会经常遇到一个问题:比如生产环境发版用到了A分支,但是开发环境用到了B分支,我们往往需要先经过开发环境的测试验证才会发到生产环境,但是在此期间可能会有其他需求也在B分支上但是并不想发布到生产环境,这时候就需要我们把当前commit或者某几个commit剥离出来合并到A分支上。

二、实现

目标: 把B分支上的部分代码合并到A分支

1、首先我们需要把代码先push到B分支上(略..)

2、然后我们需要切换到A分支上(同时记得pull一下,以防有冲突)

git checkout A

3、把指定commit的合并到A分支上

git cherry-pick 977e2b7fcc93e9edd266620a6872a5b4250c5468 //977e2b7fcc93e9edd266620a6872a5b4250c5468 为git上的commit id

4、把代码推到A分支

git push origin A

Git 中使用 `git revert` 命令后,默认情况下会生成一个新的提交,该提交会撤销指定 commit 的更改。然而,Git 本身并不支持直接只推送 revert 后的部分文件,因为 revert 操作是针对整个提交的。不过,可以通过以下方法实现只推送部分文件的更改: 1. **手动撤销更改并提交特定文件** 在执行 `git revert` 之前,可以手动撤销某些文件的更改。具体步骤如下: - 执行 `git revert --no-commit <commitId>`,这将把指定提交的更改反向合并到工作区,但不会自动提交[^1]。 - 使用 `git checkout -- <file>` 命令撤销特定文件的更改。 - 使用 `git add <file>` 添加需要提交的文件。 - 最后使用 `git commit` 提交更改。 示例: ```bash git revert --no-commit d9a16cc git checkout -- unwanted_file.txt git add wanted_file.txt git commit -m "Revert only specific files" ``` 2. **使用 patch 模式选择性添加更改** 如果希望更加精细地控制哪些更改被提交,可以使用 `git add -p` 命令进行交互式添加。此方法允许逐块选择要提交的更改内容[^1]。 示例: ```bash git revert --no-commit d9a16cc git add -p git commit -m "Revert selected changes only" ``` 3. **使用 stash 保存未提交的更改** 如果已经执行了 `git revert` 并生成了新的提交,但仍希望只推送部分文件,可以尝试以下步骤: - 使用 `git reset HEAD~1` 回退到 revert 之前的状态。 - 使用 `git stash` 将所有更改暂存。 - 使用 `git stash apply` 并结 `git checkout` 和 `git add` 选择性地恢复和提交特定文件。 示例: ```bash git reset HEAD~1 git stash git stash apply git checkout -- unwanted_file.txt git add wanted_file.txt git commit -m "Selective revert" ``` 需要注意的是,上述方法虽然可以实现部分文件的 revert 和推送,但在多人协作的环境中应谨慎操作,以避免因历史记录混乱而引发的冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值