什么是git快进?

时间:2015-04-16 11:51:29

标签: git

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

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

2 个答案:

答案 0 :(得分:48)

当你尝试将一个提交与可以通过遵循第一个提交的历史记录到达的提交合并时,Git通过向前移动指针来简化事情,因为没有不同的工作要合并在一起 - 这被称为“快进” 。”

更多信息:http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

另一方面,

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

答案 1 :(得分:15)

在Git中,“快进”意味着更新HEAD指针,使其新值是先前值的直接后代。换句话说,先前值是父,祖父母或祖父母,......

当新HEAD相对于您要集成的流处于分歧状态时,无法进行快速转发。例如,您在master并且有本地提交,git fetch已将新的上游提交带入origin/master。分支现在偏离其上游而无法快速转发:您的master HEAD提交不是origin/master HEAD的祖先。只需将master重置为origin/master的值,就会丢弃您的本地提交。这种情况需要改变或合并。

如果您的本地master没有更改,则可以快速转发:只需更新以指向与最新origin/master相同的提交。通常,快进不需要特殊步骤;在没有本地提交的情况下,它由mergerebase完成。

  

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

不,这称为 rebasing ,当没有要重播的提交时(目标分支有新的提交和目标分支的历史记录),其中快速转发是一种特殊情况没有被重写,所以目标分支上的所有提交都将当前的提交作为其祖先。)