问题描述
我有一个功能分支,与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
中引入的更改。