我有一个分支,我从主分支.我们称之为整合.
在集成分支中,我做了各种提交(C1,C2,C3).当我完成后,我向主分支发出了拉取请求.在master分支中,我做了一个"Squash and Merge",因此只能在master中进行一次提交.这一切看起来都很棒.
但后来,我对集成分支进行了一些额外的更改,当我再次发出pull请求时,我看到了我已经提交的先前更改(C1,C2,C3,C4)的所有提交注释.如果我在之前的提交中使用默认的"创建合并提交",则不会出现此问题.我做错了什么?
视觉上更容易理解.这是你的回购.master是在提交B,你的feature分支是在提交C3.
A - B [master]
\
C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)
正常合并就是这样做的.添加了一个新的合并提交,BC123将内容master与中的内容相结合feature.历史是联系在一起的.注意,feature不动,它仍然在C3.
A - B ------------- BC123 [master]
\ /
C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)
壁球和合并这样做.
A - B ------------- BC123 [master]
\
C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)
BC123包含与以前相同的合并内容,但没有与feature分支的连接.而且,feature不会改变.feature不会被压扁,它会粘在一起.而是BC123包含来自的压扁变化feature.
当你做更多的工作feature,提交C4和C5在这里,这发生了.
A - B ------------- BC123 [master]
\
C1 - C2 - C3 - C4 - C5 [feature]
Run Code Online (Sandbox Code Playgroud)
当您发出拉取请求时,将显示feature未输入的所有更改master.至于Git关注的C1是C5.如果你再次压缩和合并,会有一个新的提交master,但只有C4和C5的内容,因为Git非常善于找出分支之间的重复内容.
A - B ------------- BC123 - C45 [master]
\
C1 - C2 - C3 - C4 - C5 [feature]
Run Code Online (Sandbox Code Playgroud)
虽然你可以这样工作,但这很令人困惑.
长话短说:一旦你合并了一个分支,就不再对它进行处理了.删除它.如果您需要做更多工作,请打开一个新分支.
如果我在之前的提交中使用默认的"创建合并提交",则不会出现此问题.
回到合并版本......
A - B ------------- BC123 [master]
\ /
C1 - C2 - C3 [feature]
Run Code Online (Sandbox Code Playgroud)
如果你做更多的工作feature......
A - B ------------- BC123 [master]
\ /
C1 - C2 - C3 - C4 - C5 [feature]
Run Code Online (Sandbox Code Playgroud)
然后做一个pull请求,Git会告诉你feature不在的提交master.由于合并,master包含C1,C2和C3.所以PR只会告诉你C4和C5.这仍然令人困惑,同样的建议适用:合并分支后,删除它.如果您需要做更多工作,请打开另一个.
虽然壁球和合并更简单,但合并(完成正确)可以为Git提供更健康的历史记录和更多信息.如果您了解分支和合并的工作原理,您将从Git中获得更多.
如果我理解你的情况是正确的......
您做错的主要事情是在合并后继续使用分支。合并后,删除分支。额外的工作应该在一个新的分支上。
第一个“Squash and Merge”不影响集成分支;集成提交如何出现在主分支上。因此,由于您正在重用旧分支,因此 A、B 和 C 仍然存在是有道理的。
祝你好运。
| 归档时间: |
|
| 查看次数: |
1790 次 |
| 最近记录: |