题
我有一个远程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 ...
最后一个合并是“章鱼合并”,因为它立刻合并了很多分支。
希望这可以帮助
如果你已经 git merge bugfix
上 main
, ,您可以将您的合并挤压成一个:
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
分支提交,您可以自定义。
我在这里彻底解释它: https://youtu.be/fqnaiacelt4
假设您在功能/任务1中工作了多个提交。
转到您的项目分支(项目/my_project)
git checkout project/my_project
创建一个新的分支(功能/task1_bugfix)
git checkout -b feature/task1_bugfix
玛格和
--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>
这不提交,允许您首先对其进行审查。
然后提交并完成此新分支的功能,然后删除/忽略旧分支(您确实在开发)。