将测试分支(最终提交)合并到主分支的 Git 操作

5

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

如何实现这一目标是最好的方式?
生成一个补丁并将其应用于主分支是最好的方式吗?
如果是这样,我该如何生成/应用补丁呢?

3个回答

5

"理解Git工作流程"描述了各种方法:

短期工作

大多数情况下,我的清理只是一个合并。

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
您正在寻找git合并的--squash选项:
--squash --no-squash 生成工作树和索引状态,就像真正的合并发生了一样(除了合并信息),但不会实际进行提交或移动HEAD,并且也不记录$GIT_DIR / MERGE_HEAD来导致下一个git提交命令创建一个合并提交。这使您可以在当前分支的顶部创建单个提交,其效果与合并另一个分支相同(如果是八达通,则更多)。
使用--no-squash执行合并并提交结果。此选项可用于覆盖--squash。
因此,使用git merge --squash test-branch并提交。
您还可以尝试git merge --no-commit --no-ff test-branch

我做了一些阅读,重新设置基础是否会使历史记录更清晰?请查看http://365git.tumblr.com/post/4364212086/git-merge-squash。 我还想知道如果我执行git merge --squash testing-branch,然后删除testing分支,那么该分支中的提交将去哪里挂起? - resting

0
git checkout master
git merge --squash testing-branch

--squash命令会将你的工作状态设置成测试分支上所有更改与主分支合并后的状态,但不会创建任何提交记录。然后,您可以使用git commit命令,将所有更改一次性提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接