git rebase和壁球已经从主合并的分支?

问题描述

我有一个功能分支,与master并行工作了一段时间。在这段时间内,直接对母版进行了一些更改之后,我将这些更改合并到了功能分支中。我还将一些小功能合并到功能分支中,因为小功能是大功能的一部分。

现在,我想将功能分支合并到master上,但是首先,我想将功能分支上的某些提交压缩为更少的提交(或单个提交),因为我有很多类型的“正在进行中” ,“ ---- WIP”等我不想弄混的主人。

所以目前我有这样的东西

                        [dev/feature]
                             |              
                        Finally done!
                             |
                             | 
 [dev/smallfeature]          |                             [master]
          |                  |                                |
          |   Merge branch dev/smallfeature into dev/feature  |
          |                 /|                                |
          |----------------/ |                                |
          |                  |                                | 
          |      Merge branch master into dev/feature         |
          |                  |\                               |
          |                  | \------------------------------|
Made the small feature work  |                                |
          |                  |                         Fixed some typos
          |                  |                                | 
          |                  |                                |
          |             Work in progress...                   |
          |                  |                                |
          |      Merge branch master into dev/feature         |
          |                  |\                               |
          |                  | \------------------------------|
          |                  |                                |
   Experimenting...          |                      Released version 1.2.3
          |                  |                                |
          |             Working on it...                      |
          |                  |                                |
          |                  |                                |
          |                  |                                |
          |                   \-------------------------------|
          |                                                   |
          |                                                   |
          |                                            Fixed some colors 
          |                                                   |
          |                                                   |
           \--------------------------------------------------|
                                                              |

我想结束这样的事情

      [master]
         |
         |
    Feature added
         |
         |
  Fixed some typos
         |
         |
Released version 1.2.3
         |
         |
  Fixed some colors
         |
         |

我正在使用IntelliJ,当我从Working on it...-commit进行交互式变基时,我也可以在对话框中看到直接在master上进行的提交。如果我也选择“壁球”,会不会搞砸?它们已经在master上,所以如果我将它们压榨然后将特征分支合并到master上会发生什么?这有可能吗?

解决方法

为了获得您所描述的结果,您只需执行squash merge

git switch master
git merge --squash dev/feature
git commit -m "Feature added"

Git会将dev/feature中的文件与master中的文件合并在一起,并在master的顶部构造一个新树。由于您已经将master合并到dev/feature中,因此结果树最终将只包含dev/feature中引入的更改。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...