我正在一个长时间运行的特性分支上工作,在这个分支上我有很多提交,这些提交加起来就是一个新特性。我在开发过程中所做的小提交与我在开发分支中合并的提交完全混合在一起。我想把这些提交压缩成一个提交,这个提交包含了新功能的所有代码更改,同时维护了同事的提交。
通常我会使用git rebase交互和重新排序/压缩我的提交来完成这一点。然而,考虑到从这个分支开始到功能完成的提交数量,我对这样做犹豫不决。有没有更有效的方法来实现我的目标?
你可以利用git不存储更改,它存储状态.
因此,要创建一个单独的提交,应用所有的更改,并从开发的所有更改,你可以:
- 确保你的分支(让我们称之为"feature")拥有所有来自开发合并的最新更改
- 从最新开发的 创建一个新的分支(我们称之为"feature-new")
- 用"feature"> 中的代码覆盖所有工作副本文件
- 像刚刚编辑过一样提交
这基本上就是你在"squash"之后剩下的内容。无论如何。唯一需要进一步解释的部分是步骤3,它可以在一个命令中实现:
git restore --source=feature --worktree --staged .
这将从分支"feature"的当前状态中获取当前目录(.
)中的所有文件。(--source=feature
),将它们写入工作副本(--worktree
),并将它们提交(--staged
)。
(如果你的git版本太旧,不支持git restore
,你需要使用git reset --mixed feature
,它将执行更改,但不更新工作副本。"git重置"的不同模式相当令人困惑,这就是为什么"git restore";添加。)