首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么git合并有时创建提交,有时不?

为什么git合并有时创建提交,有时不?
EN

Stack Overflow用户
提问于 2013-11-26 16:35:55
回答 4查看 18.6K关注 0票数 87

当我从另一个分支执行git merge到当前工作区时,git有时会进行新的提交:

代码语言:javascript
复制
Merge remote-tracking branch xxx into xxx

有时,它没有:

代码语言:javascript
复制
Fast-forward
... src files ...

那么,是什么决定了是否应该创建提交呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-26 16:48:59

所谓的“快速转发”合并不会产生提交,而其他合并(通常被称为“章鱼合并”)则生成提交。

基本上,当你的分支没有发散时,快速前进就会发生.

假设要将分支foo合并到master分支中。如果这些分支没有分离,您将有这样的历史记录(每个*表示一个提交):

代码语言:javascript
复制
*---* (master)
     \
      *---*---* (foo)

在这种情况下,合并是快速前向,因为(根据图论,这是git图的底层基础),master可以从foo获得。换句话说,您只需将master引用移动到foo,您就完成了:

代码语言:javascript
复制
*---*
     \
      *---*---* (master, foo)

当你的树枝分叉时:

代码语言:javascript
复制
*---*---* (master)
     \
      *---*---* (foo)

您必须创建一个提交来“加入”这两个分支:

代码语言:javascript
复制
                ↓
*---*---*-------* (master)
     \         / 
      *---*---* (foo)

箭头指向的提交是合并提交,有两个父提交(前master分支提示和当前foo分支提示)。

请注意,您可以强制Git创建合并提交,以便使用--no-ff选项进行快速合并。

我强烈建议阅读http://think-like-a-git.net/,以便很好地理解图论如何应用于git (您不需要了解图论,您需要知道的一切都在网站上),这将使Git的工作变得非常容易:)

票数 123
EN

Stack Overflow用户

发布于 2013-11-26 16:39:28

您可以使用--no-ff选项强制新提交以避免快速转发。

票数 24
EN

Stack Overflow用户

发布于 2013-11-26 16:39:47

快速转发意味着已经发生了提交,并存储在日志中,并且您的头(指针)已经向前移动到该提交。您可以签出合并行为这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20222732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档