You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将feat分支所有变更移至main分支并置为未暂存状态?

实现将feat分支变更移至main分支并设为未暂存状态

需求说明

我有一个名为feat的功能分支,提交链如下:

(feat) HEAD -> c1 -> c2 -> c3

其中c1新增c1.txt,c2新增c2.txt,以此类推。最终要实现的效果是:把feat分支的所有变更(包括跨数月的数十次提交、与main的合并记录)全部移到main分支,且所有变更处于未暂存状态(即git status中显示红色),方便在main分支从头重建这些工作。

现有方法验证

你尝试的命令是可行的:

# 在feat分支执行
git reset main
git checkout main

原理是:git reset main会将feat分支的指针回退到main分支的当前提交,但默认使用--mixed模式,保留工作区所有原feat分支的修改;之后切换到main分支,因为当前HEAD与main指向同一个提交,工作区的修改会被保留到main分支下,最终所有变更就处于未暂存状态。

更简洁的替代方法

方法1:直接在main分支导入差异

无需切换到feat分支,直接在main分支执行:

git diff main..feat | git apply -

这个方法直接提取feat相对于main的所有变更差异,然后应用到main分支的工作区,所有变更自动处于未暂存状态,适合分支间差异清晰的场景。

方法2:用合并 squash 后撤销暂存

如果分支有复杂的合并记录,这个方法更可靠:

# 确保当前在main分支
git checkout main
# 将feat的所有变更合并到暂存区,但不生成提交
git merge --squash feat
# 撤销暂存,将所有变更放回工作区
git reset HEAD

git merge --squash会把feat分支相对于main的所有变更整合到暂存区,之后git reset HEAD会把暂存区的所有内容移回工作区,完美实现需求,且能处理包含合并记录的复杂分支。

内容的提问来源于stack exchange,提问作者Johnny Metz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:20:38