我的问题很简单。从原始存储库中提取新更改时,git pull
是否执行快进合并?我在文档中读到默认情况下没有,但是在拉动时我没有任何合并提交。
作为示例,请考虑具有以下历史记录的原始存储库:
A -> B -> C -> D
我的工作资料库就像:
A -> B -> C -> W -> X
然后,如果我从遥控器拉,我得到:
A -> B -> C -> W -> X -> D
X
和D
之间没有任何合并提交。在提取新更改时没有合并冲突。这与我从git指南中理解的内容不符。
答案 0 :(得分:0)
如果它的行为类似,则要么调用git pull --rebase
,要么更改了本地存储库的配置,以便pull
默认执行rebase。
pull
首先为要集成的分支执行fetch
,然后默认为merge
,或者如果配置或参数另有说明rebase
。
如果您没有任何仅存在于本地分支中的提交,则merge
默认会执行快进合并。您可以通过配置或参数--no-ff
来阻止此操作,或者您可以强制只通过配置或参数--ff-only
完成快进合并,在这种情况下,如果没有快进合并,则合并将失败可能(即你已完成本地提交)。
使用merge
无法实现您描述的行为,因为它是rebase
,它会更改D
的历史记录,从而也会更改其SHA值。这是一个完整的新提交,作为提交者名称,现在作为提交者日期引入与D
相同的更改,并具有相同的作者姓名和作者日期。这种重写的提交通常称为D'
。