在MainBranch
中说出我的主要分支。我已经建立了一个本地分支Test
。
我继续在我的本地分支上工作,同时我做了几次提交并多次将它推送到我当地的分支机构。
现在,我的工作已完成,我想将其合并到MainBranch
。
我想将其合并到MainBranch
的小费。
我试过了:
git checkout `MainBranch`
git merge `Test`
git commit -m "Merging to main branch".
它工作正常,但它也显示我的本地提交,这些都是非必需品。
有没有办法将本地分支合并到MainBranch
而不显示我的本地提交?
我错过了什么吗?
答案 0 :(得分:3)
它工作正常,但它也显示我的本地提交 真的没必要。
如果您不想显示本地提交,请使用--squash
开启git merge命令。
<强> - 壁球强>
- 没有壁球生成工作树和索引状态,就像发生了真正的合并一样(合并信息除外),但实际上并没有 进行提交,移动HEAD或记录$ GIT_DIR / MERGE_HEAD(导致 下一个git commit命令来创建合并提交)。这可以让你 在当前分支的顶部创建单个提交,其效果是 与合并另一个分支相同(或者在章鱼的情况下更多)。
使用--no-squash执行合并并提交结果。这个选项 可以用来覆盖--squash。
要了解有关隐藏微提交的更多信息,this SO question似乎是一个很好的资源。
答案 1 :(得分:2)
--squash
是最简单的方法。
如果您仍希望将某些粒度保留到您的分支(即分支显示太多小提交,但您不希望将所有内容放入一个太大而无法提交的单个提交中掌握),你可以尝试互动rebase。
git rebase
允许您选择哪些提交压缩在一起,以及哪些提交要与其他提交分开。它甚至可以将一个提交分成几个提交。
-i --interactive
列出即将重新定位的提交。让用户在变基之前编辑该列表。这种模式可以 也可用于拆分提交(请参阅下面的拆分请求)。
如果您实际上不介意具有粒度,但希望将其与主分支视觉分离,您可能会对merge
选项--no-ff
感兴趣,请参阅{{3} }。
只有在您创建分支Test
(下面提交A
)后主分支中没有任何内容发生时,这才会生效。开始示例:
A - MainBranch
\
B---C---D - Test
在git checkout MainBranch && git merge Test
之后,您有一条线性历史记录行,例如:
A---B---C---D - Test - MainBranch
MainBranch
的历史不是很干净或容易理解。
相反,您可以运行git merge --no-ff Test
,并将分支分开:
A-----------M - MainBranch
\ /
B---C---D - Test
,M是合并提交。
这是我通常的工作流程。