猿问

`git merge`和`git merge --no-ff`有什么区别?

`git merge`和`git merge --no-ff`有什么区别?

使用gitk log,我无法发现两者之间的差异。如何观察差异(使用git命令或某些工具)?



Helenr
浏览 1961回答 3
3回答

jeck猫

如果--no-ff标志git merge检测到您当前HEAD是您尝试合并的提交的祖先,则该标志会阻止执行“快进” 。快进是指git只是将您的分支指针移动到指向传入提交的位置,而不是构建合并提交。这通常发生在git pull没有任何本地更改的情况下。但是,有时您希望防止此行为发生,通常是因为您希望维护特定的分支拓扑(例如,您正在合并主题分支,并且您希望确保在阅读历史记录时看起来如此)。为了做到这一点,你可以通过--no-ff标志和git merge将始终构造一个合并,而不是快速转发。同样,如果你想执行一个git pull或者使用git merge以便明确地快进,并且你想要在它不能快进时挽救,那么你可以使用该--ff-only标志。通过这种方式,您可以不git pull --ff-only经思考地定期执行某些操作,然后如果错误,您可以返回并决定是否要合并或重新绑定。

凤凰求蛊

该--no-ff选项确保不会发生快进合并,并始终创建新的提交对象。如果您希望git维护功能分支的历史记录,这可能是理想的。             在上面的图像中,左侧是使用后的git历史git merge --no-ff的示例,右侧是可以使用git mergeff合并的示例。编辑:此图像的先前版本仅指示合并提交的单个父项。合并提交有多个父提交,git用它来维护“特征分支”和原始分支的历史记录。多个父链接以绿色突出显示。
随时随地看视频慕课网APP
我要回答