什么是Git快进?

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

254348 次浏览

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

更多信息:3.2 Git分支-基本分支和合并

另一方面,

如果没有发散,Git不会创建新的提交,而是将master指向特性分支的最新提交。这是一个“快进”。

不会有任何“合并承诺”;在快进合并中。

在Git中,“快进”意味着以这样一种方式更新HEAD指针,使其新值是先前值的直接后代。换句话说,先验值是父(parent)、祖父母(grandparents)、祖父母(grandgrandparent)……

当新的HEAD相对于要集成的流处于发散状态时,快速转发是不可能的。例如,你在master上并有本地提交,而git fetch已经将新的上游提交带入了origin/master。分支现在与上游分支分离,不能快速转发:你的master HEAD提交不是origin/master HEAD的祖先。简单地将master重置为origin/master的值会丢弃你的本地提交。这种情况需要重组或合并。

如果你的本地master没有变化,那么它可以快进:简单地更新为指向与最新的__abc1相同的提交。通常,快进不需要特别的步骤;在没有本地提交的情况下,它由mergerebase完成。

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

不,它被称为变基,其中快进是一种特殊情况,当没有要重放的提交时(并且目标分支有新的提交,并且目标分支的历史没有被重写,因此目标分支上的所有提交都以当前的提交作为它们的祖先)。

我使用'git rebase',它起作用了。