Git合并扁平化

如果我在单个function上的多个分支工作,我使用git pull branch1 branch2 branch3将所有更改拉到我的主分支。 但是,每个分支的所有提交日志也被复制。 如何将提交日志压缩到单个消息?

您可以使用交互式底图和“挤压”提交 – 另请参阅GIT就绪教程通过重新压缩挤压 。 对不起,只是转储一个链接,但这是一个非常彻底的教程。 哦,这也将压缩你的合并就好了。

“git merge –squash”(在“git fetch”之后;“git pull”只是提取+合并,它也允许–squash选项) 可能是你想要的。

从git-merge(1) :

– 壁球

产生工作树和索引状态就好像一个真正的合并发生了,但是实际上并没有提交或移动HEAD,也没有logging$GIT_DIR/MERGE_HEAD导致下一个git commit命令创build一个合并提交。 这使您可以在当前分支上创build一个单独的提交 ,其效果与合并另一个分支(或更多的章鱼)相同。

正如Brian White用git merge --squash评论这个问题git merge --squash是它没有给出可见的链接,因此没有可追溯到你合并到的分支(或者单个变更)。

显而易见(当被看作是一个graphics的git log --graph )时,一个重新合并的重要分支看起来没有什么不同,而这个实验分支与你git log --graph ,并且会git log --graph地被抛弃。 两者都挂在那里,没有任何连接。 我个人想知道某个分支已经合并回来了,所以我知道工作已经完成了。

一个适用于我的解决scheme是使用no-fastforward选项进行合并。

 git merge --no-ff somebranch -m "my commit message" 

这迫使git创build一个包含所有分支更改的单独提交,你可以自己设置提交信息(如果你想的话),但最重要的是,它将新的提交链接到刚刚合并的分支。这明显表明工作在那个分支上是完整的,但是也允许你追溯到合并分支的单个提交的细节。

这里有一个例子,其中有一个和两个提交的非常简单的分支已经合并回主。 随后我删除了合并分支上的分支标记,但分支名称仍然可以在合并提交消息中看到。 分支名称应该总结变化,如果你想知道包含的确切变化,你可以追溯到个别的提交。 这种方法似乎很适合简单的项目。

注意:我必须手动绘制其中一个连接器,因为它是如此深的蓝色,几乎看不见。

git日志输出