Git合并测试分支(最终提交)到master分支

时间:2012-02-02 06:04:51

标签: git merge branch final

我创建了一个测试分支。它有很多微小的提交来构建一个功能。 最后,我想进行最后完成的更改,并将它们放入主分支 主分支,不应包含测试分支的历史记录 测试分支最终将被删除。

实现这一目标的最佳方法是什么? 生成补丁并将其应用于主人是最好的方法吗? 如果是这样,我该如何生成/应用补丁?

3 个答案:

答案 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,所有更改都将在一次提交中进行。