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

对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交

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


当前回答

如果您已经在main上安装了gitmerge错误修复程序,可以使用以下命令将合并提交压缩为一个:

git reset --soft HEAD^1
git commit

其他回答

对于Git

创建新功能

通过终端/外壳:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

这并不意味着你可以先回顾一下。

然后提交并完成这个新分支的功能,并删除/忽略旧分支(您开发的那个分支)。

如果您已经在main上安装了gitmerge错误修复程序,可以使用以下命令将合并提交压缩为一个:

git reset --soft HEAD^1
git commit

最终让我明白这一点的是一条评论:

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自己无法解决的提交)。使用gitmerge--squash可以得到我想要的结果,只需提交一次即可合并整个功能分支。而且,我最多只需要做一次手动冲突解决。

要在推动本地分支之前将其压扁,请执行以下操作:

如果尚未签出,则签出要处理的分支。找到你想要保存的最古老的承诺的sha。从该提交创建/签出新分支(tmp1)。git checkout-b tmp1<提交的sha1>将原始分支合并到新的挤压分支中。git merge--squash<原始分支>使用摘要提交消息提交合并创建的更改。git提交-m<msg>检出要挤压的原始分支。git checkout<branch>重置为您希望保留的原始提交sha。git重置--软<sha1>基于新的tmp1分支重新设置此分支。git重基tmp1就是这样-现在,一旦确定一切正常,就删除临时tmp1分支。

您的功能分支已完成并准备好只需一次提交即可提交到主分支、开发分支或其他目标分支

转到合并分支:git checkout master和git pull从干净的本地主机创建一个工作分支:gitcheckout-b workMerge在工作时挤压你的功能分支:git Merge--挤压你的_feature_branch。使用默认或新消息提交:gitcommit(使用特定或默认消息)返回功能分支:git checkout your_feature_branch将功能分支指向工作目录:git reset-hardwork验证,但您已准备好推送:git push-f如果需要,清理工作分支

用目标分支替换master:开发等等

无需指定从主节点到功能分支的提交次数。Git负责*