协慌网

登录 贡献 社区

如何使用 git merge --squash?

我有一个远程 Git 服务器,这是我想要执行的场景:

  • 对于每个 bug / 功能,我创建了一个不同的 Git 分支

  • 我继续使用非官方的 Git 消息在 Git 分支中提交我的代码

  • 在顶级存储库中,我们必须使用官方 Git 消息对一个错误进行一次提交

那么如何将我的分支合并到远程分支,以便他们只为我的所有签到提交一个提交(我甚至想为此提供提交消息)?

答案

说你的错误修复分支叫做bugfix ,你想把它合并到master

git checkout master
git merge --squash bugfix
git commit

这将从bugfix分支获取所有提交,将它们bugfix为 1 次提交,并将其与master分支合并。


说明

git checkout master

切换到您的master分支。

git merge --squash bugfix

bugfix分支获取所有提交并将其与当前分支合并。

git commit

从合并的更改中创建单个提交。

省略-m参数允许您在完成提交之前修改包含来自压缩提交的每条消息的草稿提交消息。

最终为我解释的是一条评论显示:

git checkout main
git merge --squash feature

相当于做:

git checkout feature
git diff main > feature.patch
git checkout main
patch -p1 < feature.patch
git add .

当我想将一个功能分支与 105(!!)提交合并并将它们全部压缩成一个时,我不想git rebase -i origin/master因为我需要单独解决每个中间提交的合并冲突(或者至少是 git 无法弄明白的东西)。使用git merge --squash获取我想要的结果,用于合并整个功能分支的单个提交。而且,我最多只需要做一次手动冲突解决。

您想要与壁球选项合并。如果你想一次做一个分支就行了。

git merge --squash feature1

如果你想在单次提交的同时合并所有分支,那么首先以交互方式重新绑定并压缩每个特征然后章鱼合并:

git checkout feature1
git rebase -i master

压入一个提交然后重复其他功能。

git checkout master
git merge feature1 feature2 feature3 ...

最后一次合并是 “章鱼合并”,因为它同时合并了很多分支。

希望这可以帮助