git pull branch1 branch2 branch3
将所有更改拉取到我的主分支。但是,每个分支的所有提交记录也会被复制。如何将提交记录平铺为单一消息?"git merge --squash"(在"git fetch"之后;"git pull"只是fetch+merge,也许它也允许--squash选项)可能是你想要的。
--squash
产生工作树和索引状态,就像真正合并发生的那样,但实际上不会进行提交或移动HEAD,也不记录
$GIT_DIR/MERGE_HEAD
以导致下一个git commit命令创建一个合并提交。这使您可以在当前分支的顶部创建一个单一的提交,其效果与合并另一个分支(或在八爪鱼的情况下更多)相同。
您可以使用交互式rebase并“压缩”提交 - 另请参阅通过rebase压缩的Git Ready教程。抱歉只是给您提供链接,但那是一个非常全面的教程。哦,这也可以很好地压缩您的合并。
正如Brian White所评论的那样,git merge --squash
存在的问题在于它没有提供任何可见的链接,因此无法追溯到你合并的分支(或个别更改)。当以图形方式查看(使用 git log --graph
)时,已合并回来的重要分支看起来与你随意处理并可以轻松丢弃的实验性分支没有什么区别。两者都悬挂在那里,没有连接到任何东西。我个人想知道某个分支是否已经合并回来,这样我就知道工作已经完成了。
对我有效的解决方案是使用不快进选项进行合并。
git merge --no-ff somebranch -m "my commit message"
这将强制Git创建一个提交,包括所有分支更改,您可以自己设置提交消息(如果需要),但最重要的是,它将新提交链接回刚合并进来的分支。这清楚地显示了该分支上的工作已完成,但也允许您追溯到合并的分支的各个提交的详细信息。
这是一个示例,其中非常简单的分支分别具有一个和两个提交,并已合并回主分支。随后我删除了合并的分支标签,但是分支名称仍然可以在合并提交消息中看到。分支名称应总结更改,如果您想知道包含的确切更改,可以将其追溯到单个提交。这种方法似乎非常适用于简单的项目。
注意:由于它是如此深的蓝色,因此我不得不手动绘制其中一个连接器,因为几乎看不清。
merge --squash
命令即可。效果(即将分支的所有更改作为单个差异转储到当前分支)相同,但工作量减少了一半。 - Yuval Adamgit merge --squash branch && git commit -m "message"
命令合并分支的问题在于它实际上没有将分支标记为已合并。使用git branch -d
命令无法移除该分支(需要使用-D
命令),而图形化查看工具会显示该分支仍旧存在,而不是已经被合并了。 - Brian White