如何使用git merge --squash?

我有一个远程Git服务器,这是我想要执行的场景: 对于每个bug /功能,我创建了一个不同的Git分支 我继续使用非官方的Git消息在Git分支中提交我的代码 在顶级存储库中,我们必须使用官方Git消息对一个错误进行一次提交 那么如何将我的分支合并到远程分支,以便他们只为我的所有签到提交一个提交(我甚至想为此提供提交消息)?     
已邀请:
假设您的错误修复分支被称为
bugfix
,并且您想将其合并到
master
git checkout master
git merge --squash bugfix
git commit
这将从
bugfix
分支中获取所有提交,将它们压缩为1次提交,并将其与您的
master
分支合并。 说明:
git checkout master
切换到
master
分支。
git merge --squash bugfix
bugfix
分支获取所有提交并将其与当前分支合并。
git commit
从合并的更改中创建单个提交。 省略
-m
参数可以在完成提交之前修改包含来自压缩提交的每条消息的草稿提交消息。     
最终为我解释的是一条评论显示:
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无法弄清楚自己)。使用
git merge --squash
获取我想要的结果,用于合并整个功能分支的单个提交。而且,我最多只需要做一次手动冲突解决。     
您想要与壁球选项合并。如果你想一次做一个分支就行了。
git merge --squash feature1
如果你想在单次提交的同时合并所有分支,那么首先以交互方式重新绑定并压缩每个特征然后章鱼合并:
git checkout feature1
git rebase -i master
压入一个提交然后重复其他功能。
git checkout master
git merge feature1 feature2 feature3 ...
最后一次合并是“章鱼合并”,因为它同时合并了很多分支。 希望这可以帮助     
如果你已经在
main
git merge bugfix
,你可以将你的合并提交压缩成一个:
git reset --soft HEAD^1
git commit
    
使用自定义提交将
newFeature
分支合并到
master
git merge --squash newFeature && git commit -m 'Your custom commit message';
相反,如果你这样做
git merge --squash newFeature && git commit
您将收到一条提交消息,其中包含您可以自定义的所有
newFeature
分支提交。     
我知道这个问题并不是特别关于Github,但是由于Github如此广泛使用,这就是我想要的答案,我将在这里分享。 Github能够执行squash合并,具体取决于为存储库启用的合并选项。 如果启用了squash合并,则“Squash and merge”选项应出现在“Merge”按钮下方的下拉列表中。     
假设您在feature / task1中使用多次提交。 转到项目分支(project / my_project)
git checkout project/my_project
创建一个新分支(feature / task1_bugfix)
git checkout -b feature/task1_bugfix
Marge与
--squash
选项
git merge --squash feature/task1
创建一个提交
git commit -am "add single comments"
推你的分支
git push --set-upstream origin feature/task1_bugfix
    
对于Git 创建一个新功能 通过终端/外壳:
git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>
这不提交它,允许您先查看它。 然后提交,并从这个新分支完成功能,并删除/忽略旧分支(你开发的那个)。     

要回复问题请先登录注册