`git merge`和`git merge --no-ff`有什么区别?使用gitk log,我无法发现两者之间的差异。如何观察差异(使用git命令或某些工具)?
3 回答
jeck猫
TA贡献1909条经验 获得超7个赞
如果--no-ff
标志git merge
检测到您当前HEAD
是您尝试合并的提交的祖先,则该标志会阻止执行“快进” 。快进是指git只是将您的分支指针移动到指向传入提交的位置,而不是构建合并提交。这通常发生在git pull
没有任何本地更改的情况下。
但是,有时您希望防止此行为发生,通常是因为您希望维护特定的分支拓扑(例如,您正在合并主题分支,并且您希望确保在阅读历史记录时看起来如此)。为了做到这一点,你可以通过--no-ff
标志和git merge
将始终构造一个合并,而不是快速转发。
同样,如果你想执行一个git pull
或者使用git merge
以便明确地快进,并且你想要在它不能快进时挽救,那么你可以使用该--ff-only
标志。通过这种方式,您可以不git pull --ff-only
经思考地定期执行某些操作,然后如果错误,您可以返回并决定是否要合并或重新绑定。
凤凰求蛊
TA贡献1825条经验 获得超4个赞
该--no-ff
选项确保不会发生快进合并,并始终创建新的提交对象。如果您希望git维护功能分支的历史记录,这可能是理想的。 在上面的图像中,左侧是使用后的git历史git merge --no-ff
的示例,右侧是可以使用git merge
ff合并的示例。
编辑:此图像的先前版本仅指示合并提交的单个父项。合并提交有多个父提交,git用它来维护“特征分支”和原始分支的历史记录。多个父链接以绿色突出显示。
- 3 回答
- 0 关注
- 1948 浏览
添加回答
举报
0/150
提交
取消