我有一个远程Git服务器,下面是我要执行的场景:
对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,我如何将我的分支合并到远程分支,以便他们对我的所有签入仅进行一次提交(我甚至想为此提供提交消息)?
我有一个远程Git服务器,下面是我要执行的场景:
对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,我如何将我的分支合并到远程分支,以便他们对我的所有签入仅进行一次提交(我甚至想为此提供提交消息)?
当前回答
使用自定义提交将newFeature分支合并到master中:
git merge --squash newFeature && git commit -m 'Your custom commit message';
如果相反,你会
git merge--压缩新功能和git提交
您将得到一条提交消息,其中包含所有newFeature分支提交,您可以自定义这些提交。
我在这里详细解释:https://youtu.be/FQNAIacelT4
其他回答
要在推动本地分支之前将其压扁,请执行以下操作:
如果尚未签出,则签出要处理的分支。找到你想要保存的最古老的承诺的sha。从该提交创建/签出新分支(tmp1)。git checkout-b tmp1<提交的sha1>将原始分支合并到新的挤压分支中。git merge--squash<原始分支>使用摘要提交消息提交合并创建的更改。git提交-m<msg>检出要挤压的原始分支。git checkout<branch>重置为您希望保留的原始提交sha。git重置--软<sha1>基于新的tmp1分支重新设置此分支。git重基tmp1就是这样-现在,一旦确定一切正常,就删除临时tmp1分支。
使用自定义提交将newFeature分支合并到master中:
git merge --squash newFeature && git commit -m 'Your custom commit message';
如果相反,你会
git merge--压缩新功能和git提交
您将得到一条提交消息,其中包含所有newFeature分支提交,您可以自定义这些提交。
我在这里详细解释:https://youtu.be/FQNAIacelT4
您希望与挤压选项合并。这是如果你想一次做一个分支。
git merge --squash feature1
如果您希望在单个提交的同时合并所有分支,那么首先以交互方式重新设置基础并压缩每个功能,然后章鱼合并:
git checkout feature1
git rebase -i master
挤压成一个提交,然后重复其他功能。
git checkout master
git merge feature1 feature2 feature3 ...
最后一次合并是“章鱼合并”,因为它同时合并了许多分支。
假设您进行多次提交的分支的名称称为bugfix/123,并且您希望压缩这些提交。首先,从develop创建一个新分支(或者无论回购的名称是什么)。假设新分支的名称为bugfix/123_up。在gitbash中签出此分支-
git获取git checkout错误修复/123-upgitmerge错误修复/123--挤压gitcommit-m“您的消息”git推送原点错误修复/123-up
现在,该分支将只有一个提交,其中包含所有更改。
最终让我明白这一点的是一条评论:
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可以得到我想要的结果,只需提交一次即可合并整个功能分支。而且,我最多只需要做一次手动冲突解决。