什么是git快进?

adr*_*upu 87 git

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

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

Abi*_*san 70

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

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

用另一种方式,

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

  • 这是否意味着“让本地 HEAD 成为远程 HEAD”? (4认同)

Kaz*_*Kaz 23

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

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

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

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

不,这被称为重订基期,它的快速转发是一种特殊情况时有没有被重放(和目标分支有新提交的提交,以及目标分支的历史并没有被改写,从而使所有提交在目标分支上有当前的一个作为他们的祖先.)

  • 请注意 rebase 解释! (2认同)

Pra*_*ngh 12

假设有一个分支

Master : A---> B --->

其上有两个提交,A 和 B 还有另一个功能分支,来自 B,它具有以下提交历史记录

Feature : C--->D---->E

所以现在看起来像这样

`A--->B`
     `C--->D--->E `
Run Code Online (Sandbox Code Playgroud)

所以当你想合并它时,你可以通过快进合并的方式来完成,将头部从 B 移动到 E 并将功能分支合并到主分支中,它看起来像这样

A--->B--->C--->D--->E标题位于 E。

Atlassian 的这个例子非常好: Atlassian 示例

Atlassian 示例

但正如示例中提到的,只有当分支没有发散时,这才有可能,在这种情况下,传统的合并或 --no-ff 起作用。

另一个好例子