Git如何在不合并分支A的情况下引入其提交至分支B并保持未暂存?
临时引入其他分支功能调试且不污染提交历史的方法
你要的需求完全可以实现,下面是几个实用的方案:
方案1:合并但不提交+重置暂存区
这是最接近「模拟合并」的方式:
- 切换到分支B:
git checkout B - 执行合并但不自动提交:
git merge --no-commit --no-ff A--no-commit:让Git不要自动生成合并提交,把所有合并后的变更留在暂存区和工作区--no-ff:强制生成合并节点(即使A是从B分叉的也不会快进,避免后续清理出现意外)
- 把暂存区的变更移回工作区(变成未暂存状态):
git reset
调试完成后,要回到分支B原来的状态,直接执行:git merge --abort
方案2:导出补丁并应用
这个方法不会产生任何合并相关的Git记录,纯手工应用变更:
- 切换到分支B:
git checkout B - 导出分支A相对于master的所有变更为补丁文件:
git diff master..A > a-feature.patch - 把补丁应用到当前工作区:
git apply a-feature.patch
此时所有变更都会留在工作区,处于未暂存状态
调试完清理的话,直接丢弃所有未暂存变更:git checkout . && git clean -fd
方案3:逐个拣选提交但不提交(适合A有多个独立提交的场景)
如果分支A是由多个独立的小提交组成,你可以逐个应用这些提交的变更但不生成新提交:
- 切换到分支B:
git checkout B - 对A的每个提交执行:
git cherry-pick --no-commit <A的提交哈希>
每个提交的变更会被放到暂存区和工作区 - 全部拣选完成后,执行
git reset把所有暂存的变更移到工作区
清理时,用git cherry-pick --abort终止未完成的拣选,或者直接用git checkout . && git clean -fd丢弃变更
内容的提问来源于stack exchange,提问作者kstn
相关产品推荐
相关产品推荐

