什么是git快进? [复制]

Posted

技术标签:

【中文标题】什么是git快进? [复制]【英文标题】:What is git fast-forwarding? [duplicate] 【发布时间】:2015-06-22 19:25:40 【问题描述】:

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

【问题讨论】:

见git-scm.com/book/en/v2/… 用一个例子和图表来解释这个 【参考方案1】:

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

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

换一种说法,

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

快进合并不会有任何“合并提交”。

【讨论】:

意思是“让本地HEAD成为远程HEAD”吗? @Victor 我也是这么解释的。这意味着您只有在本地 master 与远程 master 保持同步时才能提交。【参考方案2】:

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

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

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

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

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

【讨论】:

以上是关于什么是git快进? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

列出被忽略文件的 git 命令是啥? [复制]

Git 谜题 - 解决“拒绝非快进”问题

git clone 怎么复制到指定文件夹

如何撤消多个 git 提交? [复制]

Git推送拒绝“非快进”

sh Git快进合并和拉动