【发布时间】:2015-06-22 19:25:40
【问题描述】:
是否可以假设快进意味着所有提交都在目标分支上重放并且HEAD 设置为该分支上的最后一次提交?
【问题讨论】:
-
见git-scm.com/book/en/v2/… 用一个例子和图表来解释这个
标签: git
是否可以假设快进意味着所有提交都在目标分支上重放并且HEAD 设置为该分支上的最后一次提交?
【问题讨论】:
标签: git
当您尝试将一个提交与通过遵循第一个提交的历史可以到达的提交合并时,Git 通过将指针向前移动来简化事情,因为没有不同的工作可以合并在一起——这被称为“快进” 。”
更多:http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
换一种说法,
如果 Master 没有分歧,而不是创建一个新的提交,git 将 只需将 master 指向功能分支的最新提交。这是“快进”。
快进合并不会有任何“合并提交”。
【讨论】:
在 Git 中,“快进”意味着更新 HEAD 指针,使其新值是先前值的直接后代。换句话说,先验值是父母,或祖父母,或祖父母,...
当新的HEAD 相对于您要集成的流处于发散状态时,无法进行快速转发。例如,您在master 上并且有本地提交,而git fetch 已将新的上游提交带入origin/master。分支现在偏离其上游,无法快速转发:您的 master HEAD 提交不是 origin/master HEAD 的祖先。简单地将master 重置为origin/master 的值会丢弃您的本地提交。这种情况需要变基或合并。
如果你本地的master 没有变化,那么它可以被快进:只需更新指向与最新的origin/master 相同的提交。通常,进行快进不需要特殊的步骤;在没有本地提交的情况下由merge 或rebase 完成。
是否可以假设快进意味着所有提交都在目标分支上重放,并且 HEAD 设置为该分支上的最后一次提交?
不,那叫rebaseing,其中快进是一种特殊情况,当没有提交要重放(并且目标分支有新的提交,目标分支的历史没有被重写,因此目标分支上的所有提交都以当前提交作为其祖先。)
【讨论】: