我创建了一个测试分支。它有很多微小的提交来构建一个功能。 最后,我想进行最后完成的更改,并将它们放入主分支 主分支,不应包含测试分支的历史记录 测试分支最终将被删除。
实现这一目标的最佳方法是什么? 生成补丁并将其应用于主人是最好的方法吗? 如果是这样,我该如何生成/应用补丁?
答案 0 :(得分:4)
“Understanding the Git Workflow”中描述了各种方法:
绝大多数时候,我的清理只是一次挤压合并。
git checkout master
git merge --squash private_feature_branch
git commit -v
我决定将我的改变分解为较小的变化,因此壁球对于一种乐器来说太过钝。 (根据经验,我问,“代码审查会很容易吗?”)
git rebase --interactive master
(正如您在问题中提到的那样,不是您的情况下的选项)
也许我的功能分支存在了很长时间,我必须将几个分支合并到我的功能分支中,以便在我工作时保持最新状态。历史是错综复杂的 抓住原始差异创建一个干净的分支是最容易的。
git checkout master
git checkout -b cleaned_up_branch
git merge --squash private_feature_branch
git reset
我现在有一个充满了我的更改的工作目录,而且没有来自前一个分支的行李。现在我手动添加并提交我的更改。
答案 1 :(得分:1)
您正在寻找--squash
的{{1}}选项:
- 壁球 - 没有壁球
生成工作树和索引状态,就像发生了真正的合并一样 (合并信息除外),但实际上并未提交 或者移动HEAD,也不记录$ GIT_DIR / MERGE_HEAD来导致下一个git commit命令用于创建合并提交。这允许您创建一个 单个提交在当前分支之上,其效果与之相同 合并另一个分支(或章鱼的情况下更多)。
使用--no-squash执行合并并提交结果。这个选项 可以用来覆盖--squash。
所以git merge
并提交。
您也可以尝试git merge --squash test-branch
答案 2 :(得分:0)
git checkout master
git merge --squash testing-branch
--squash
将使您的工作集处于状态,就好像测试分支上的所有更改都与master合并,但不会创建任何提交。然后,您可以执行git commit
,所有更改都将在一次提交中进行。