我有一个远程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 bugfixmain, ,您可以将您的合并挤压成一个:

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

我知道这个问题与GitHub无关,但是由于GitHub是如此广泛使用,这是我要寻找的答案,所以我在这里分享。

GitHub具有执行南瓜合并的能力,具体取决于启用存储库的合并选项。

如果启用了南瓜合并,则“壁球和合并”选项应出现在“合并”按钮下的下拉菜单中。

Screenshot of "Squash and merge" Github feature

假设您在功能/任务1中工作了多个提交。

  1. 转到您的项目分支(项目/my_project)

    git checkout project/my_project
    
  2. 创建一个新的分支(功能/task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. 玛格和 --squash 选项

    git merge --squash feature/task1
    
  4. 创建一个提交

    git commit -am "add single comments"
    
  5. 推你的分支

    git push --set-upstream origin feature/task1_bugfix
    

用于git

创建一个新功能

通过终端/外壳:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

这不提交,允许您首先对其进行审查。

然后提交并完成此新分支的功能,然后删除/忽略旧分支(您确实在开发)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top