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

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

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


当前回答

假设您在feature/task1中使用了多个提交。

转到项目分支(project/my_project)git签出项目/my_project创建新分支(feature/task1_bugfix)git checkout-b feature/task1_bugfix使用--squash选项合并git merge--挤压功能/task1创建单个提交gitcommit-am“添加单个注释”推你的树枝git push—设置上游原点功能/task1_bugfix

其他回答

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

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

使用自定义提交将newFeature分支合并到master中:

git merge --squash newFeature && git commit -m 'Your custom commit message';

如果相反,你会

git merge--压缩新功能和git提交

您将得到一条提交消息,其中包含所有newFeature分支提交,您可以自定义这些提交。

我在这里详细解释:https://youtu.be/FQNAIacelT4

您可以使用我创建的工具来简化这个过程:git squash。例如,要挤压已从主分支分支的功能分支上的所有提交,请编写:

git squash master
git push --force

假设您在feature/task1中使用了多个提交。

转到项目分支(project/my_project)git签出项目/my_project创建新分支(feature/task1_bugfix)git checkout-b feature/task1_bugfix使用--squash选项合并git merge--挤压功能/task1创建单个提交gitcommit-am“添加单个注释”推你的树枝git push—设置上游原点功能/task1_bugfix

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

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