什么是git快进?


What is git fast-forwarding?

本问题已经有最佳答案,请猛点这里访问。

这听起来像个愚蠢的问题,但我找不到一个简单的答案。

是否可以假定快进意味着所有提交都在目标分支上重播,并且HEAD设置为该分支上的最后一个提交?


当您尝试将一个提交与一个可以通过跟踪第一个提交的历史记录来实现的提交合并时,Git通过向前移动指针来简化事情,因为没有要合并到一起的分散工作——这被称为"快进"。

更多信息,请访问:http://git-scm.com/book/en/v2/git-branching-basic-branching-and-merging

另一方面,

如果master没有分歧,而不是创建一个新的commit,那么git将只需将master指向功能分支的最新提交。这是一个"快进"。在快进合并中不会有任何"合并提交"。


在git中,"快进"是指更新HEAD指针,使其新值是先前值的直接后代。换句话说,先前的价值是父母,或祖父母,或祖父母,…

当新的HEAD相对于要集成的流处于分散状态时,无法进行快速转发。例如,您在master上,有本地承诺,git fetchorigin/master带来了新的上游承诺。分支现在偏离其上游,不能快速转发:您的masterHEADcommit不是origin/masterHEAD的祖先。简单地将master重置为origin/master的值将放弃您的本地承诺。这种情况需要重新平衡或合并。

如果您的本地master没有更改,那么可以快速转发:只需更新到指向与最新的docx1〔4〕相同的提交。通常,快速转发不需要特殊步骤;在没有本地承诺的情况下,由mergerebase执行。

Is it ok to assume that fast-forward means all commits are replayed on the target branch and the HEAD is set to the last commit on that branch?

不,这称为重新平衡,其中快速转发是一种特殊情况,即没有要重播的提交(目标分支有新的提交,并且目标分支的历史没有被重写,因此目标分支上的所有提交都以当前提交为其祖先)。