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

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

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


当前回答

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

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

其他回答

假设您的bug修复分支称为bugfix,并且您希望将其合并到master中:

git checkout master
git merge --squash bugfix
git commit

这将从错误修复分支获取所有提交,将它们压缩为一个提交,并将其与主分支合并。


说明:

git checkout master

切换到主分支。

git merge --squash bugfix

从错误修复分支获取所有提交,并将其与当前分支分组为1次提交。(没有出现合并提交;您可以在提交之前手动解决冲突)

git commit

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

省略-m参数可以在完成提交之前修改包含压缩提交中的每个消息的提交消息草稿。

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

git reset --soft HEAD^1
git commit

Use

git status 

检查发生了什么。

Then

git checkout master 
git merge --squash bugfix
git add (add which files you want or use wildcard command like ".")

Then

git commit -m "message"

现在是最后但不是最不重要的

git push -u origin master

这里的原点可以是您喜欢的其他远程。

我知道这个问题不是专门针对Github的,但由于Github被广泛使用,这是我一直在寻找的答案,我将在这里分享。

Github能够执行压缩合并,这取决于为存储库启用的合并选项。

如果启用了挤压合并,“挤压并合并”选项将出现在“合并”按钮下的下拉列表中。

您希望与挤压选项合并。这是如果你想一次做一个分支。

git merge --squash feature1

如果您希望在单个提交的同时合并所有分支,那么首先以交互方式重新设置基础并压缩每个功能,然后章鱼合并:

git checkout feature1
git rebase -i master

挤压成一个提交,然后重复其他功能。

git checkout master
git merge feature1 feature2 feature3 ...

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