git pull和fast forward merging

时间:2017-05-18 13:07:22

标签: git merge git-merge git-pull pull

我的问题很简单。从原始存储库中提取新更改时,git pull是否执行快进合并?我在文档中读到默认情况下没有,但是在拉动时我没有任何合并提交。

作为示例,请考虑具有以下历史记录的原始存储库:

A -> B -> C -> D

我的工作资料库就像:

A -> B -> C -> W -> X

然后,如果我从遥控器拉,我得到:

A -> B -> C -> W -> X -> D

XD之间没有任何合并提交。在提取新更改时没有合并冲突。这与我从git指南中理解的内容不符。

1 个答案:

答案 0 :(得分:0)

如果它的行为类似,则要么调用git pull --rebase,要么更改了本地存储库的配置,以便pull默认执行rebase。

pull首先为要集成的分支执行fetch,然后默认为merge,或者如果配置或参数另有说明rebase

如果您没有任何仅存在于本地分支中的提交,则merge默认会执行快进合并。您可以通过配置或参数--no-ff来阻止此操作,或者您可以强制只通过配置或参数--ff-only完成快进合并,在这种情况下,如果没有快进合并,则合并将失败可能(即你已完成本地提交)。

使用merge无法实现您描述的行为,因为它是rebase,它会更改D的历史记录,从而也会更改其SHA值。这是一个完整的新提交,作为提交者名称,现在作为提交者日期引入与D相同的更改,并具有相同的作者姓名和作者日期。这种重写的提交通常称为D'