我有一个远程Git服务器,下面是我要执行的场景:
对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,我如何将我的分支合并到远程分支,以便他们对我的所有签入仅进行一次提交(我甚至想为此提供提交消息)?
我有一个远程Git服务器,下面是我要执行的场景:
对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,我如何将我的分支合并到远程分支,以便他们对我的所有签入仅进行一次提交(我甚至想为此提供提交消息)?
当前回答
假设您的bug修复分支称为bugfix,并且您希望将其合并到master中:
git checkout master
git merge --squash bugfix
git commit
这将从错误修复分支获取所有提交,将它们压缩为一个提交,并将其与主分支合并。
说明:
git checkout master
切换到主分支。
git merge --squash bugfix
从错误修复分支获取所有提交,并将其与当前分支分组为1次提交。(没有出现合并提交;您可以在提交之前手动解决冲突)
git commit
从合并的更改创建单个提交。
省略-m参数可以在完成提交之前修改包含压缩提交中的每个消息的提交消息草稿。
其他回答
您希望与挤压选项合并。这是如果你想一次做一个分支。
git merge --squash feature1
如果您希望在单个提交的同时合并所有分支,那么首先以交互方式重新设置基础并压缩每个功能,然后章鱼合并:
git checkout feature1
git rebase -i master
挤压成一个提交,然后重复其他功能。
git checkout master
git merge feature1 feature2 feature3 ...
最后一次合并是“章鱼合并”,因为它同时合并了许多分支。
我知道这个问题不是专门针对Github的,但由于Github被广泛使用,这是我一直在寻找的答案,我将在这里分享。
Github能够执行压缩合并,这取决于为存储库启用的合并选项。
如果启用了挤压合并,“挤压并合并”选项将出现在“合并”按钮下的下拉列表中。
使用自定义提交将newFeature分支合并到master中:
git merge --squash newFeature && git commit -m 'Your custom commit message';
如果相反,你会
git merge--压缩新功能和git提交
您将得到一条提交消息,其中包含所有newFeature分支提交,您可以自定义这些提交。
我在这里详细解释:https://youtu.be/FQNAIacelT4
如果您收到错误:提交是不可能的,因为您有未合并的文件。
git checkout master
git merge --squash bugfix
git add .
git commit -m "Message"
修复了所有冲突文件
git add .
你也可以使用
git add [filename]
对于Git
创建新功能
通过终端/外壳:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
这并不意味着你可以先回顾一下。
然后提交并完成这个新分支的功能,并删除/忽略旧分支(您开发的那个分支)。