我有一个远程Git服务器,下面是我要执行的场景:
对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,我如何将我的分支合并到远程分支,以便他们对我的所有签入仅进行一次提交(我甚至想为此提供提交消息)?
我有一个远程Git服务器,下面是我要执行的场景:
对于每个bug/功能,我创建一个不同的Git分支我继续在Git分支中提交我的代码,并发送非官方Git消息在顶级存储库中,我们必须使用官方Git消息对一个bug进行一次提交
那么,我如何将我的分支合并到远程分支,以便他们对我的所有签入仅进行一次提交(我甚至想为此提供提交消息)?
当前回答
对于Git
创建新功能
通过终端/外壳:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
这并不意味着你可以先回顾一下。
然后提交并完成这个新分支的功能,并删除/忽略旧分支(您开发的那个分支)。
其他回答
最终让我明白这一点的是一条评论:
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可以得到我想要的结果,只需提交一次即可合并整个功能分支。而且,我最多只需要做一次手动冲突解决。
我知道这个问题不是专门针对Github的,但由于Github被广泛使用,这是我一直在寻找的答案,我将在这里分享。
Github能够执行压缩合并,这取决于为存储库启用的合并选项。
如果启用了挤压合并,“挤压并合并”选项将出现在“合并”按钮下的下拉列表中。
如果您已经在main上安装了gitmerge错误修复程序,可以使用以下命令将合并提交压缩为一个:
git reset --soft HEAD^1
git commit
对于Git
创建新功能
通过终端/外壳:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
这并不意味着你可以先回顾一下。
然后提交并完成这个新分支的功能,并删除/忽略旧分支(您开发的那个分支)。
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
这里的原点可以是您喜欢的其他远程。