Git合并平坦化

Git合并平坦化,git,git-pull,git-push,git-merge,Git,Git Pull,Git Push,Git Merge,如果我在单个功能的多个分支中工作,我将使用git pull branch1 branch2 branch3将所有更改拉入我的主分支。但是,也会复制每个分支的所有提交日志。如何将提交日志展平为一条消息?您可以使用交互式和“挤压”提交--另请参见。很抱歉在你身上留下一个链接,但这是一个非常全面的教程。哦,这也可以很好地压缩合并。git merge--squash(在“git fetch”之后;“git pull”只是fetch+merge,也许它还允许--squash选项)可能是您想要的 发件人:

如果我在单个功能的多个分支中工作,我将使用
git pull branch1 branch2 branch3
将所有更改拉入我的主分支。但是,也会复制每个分支的所有提交日志。如何将提交日志展平为一条消息?

您可以使用交互式和“挤压”提交--另请参见。很抱歉在你身上留下一个链接,但这是一个非常全面的教程。哦,这也可以很好地压缩合并。

git merge--squash(在“git fetch”之后;“git pull”只是fetch+merge,也许它还允许--squash选项)可能是您想要的

发件人:

--壁球

生成工作树和索引状态,就像发生了真正的合并一样,但不实际执行提交或移动头,也不记录
$GIT\u DIR/merge\u HEAD
以使下一个GIT commit命令创建合并提交。这允许您在当前分支上创建一个提交,其效果与合并另一个分支相同(如果是八达通,则为多个分支)


正如Brian White评论的那样,
git merge--squash的问题在于,它没有提供可见的链接,因此无法追溯到合并到的分支(或单个更改)

很明显(当作为graph
git log--graph
查看时),一个重要的分支重新合并后,看起来与一个实验性分支没有什么不同,而你会很高兴地放弃它。两者都只是挂在那里,与任何事情都无关。我个人想知道某个分支已经合并回来了,所以我知道工作已经完成了

对我来说,一个有效的解决方案是使用不带快进选项的合并

git merge --no-ff somebranch -m "my commit message"
这迫使git创建一个包含所有分支更改的提交,您可以自己设置提交消息(如果需要),但最重要的是,它将新提交链接回刚刚合并的分支。这显然表明该分支上的工作已经完成,但也允许您回溯以查看合并分支中各个提交的详细信息

下面是一个示例,其中分别具有一个和两个提交的非常简单的分支被合并回主分支。我随后删除了合并分支上的分支标记,但是仍然可以在合并提交消息中看到分支名称。分支名称应该总结更改,如果您想知道包含的确切更改,可以将其追溯到单个提交。这种方法对于简单的项目似乎很有效

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


交互式重定基址不是唯一的方法。更简单的方法是像另一个答案中提到的那样,简单地
合并--squash
。其效果(即将分支中的所有更改作为当前分支上的单个差异转储)是相同的,但工作量只有一半。
git merge--squash branch&&git commit-m“message”
的问题在于它实际上没有将分支标记为合并
git分支-d
不会将其删除(使用
-d
),图形查看工具将显示分支只是挂起而不是连接。