Git – Fast Forward 和 no fast foward

Git 很是强大,在体验过rebase的华丽之后,再次发现之前在TFS上遇到的问题一下都有解了。但也印证了Git深入并非易事。这篇就谈下一个容易迷糊的概念:Fast forward。

Fast-Forward

当前分支合并到另一分支时,如果没有分歧解决,就会直接移动文件指针。这个过程叫做fastforward。

举例来说,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个develop的分支,并在其上进行一系列提交,完成时,回到 master分支,此时,master分支在创建develop分支之后并未产生任何新的commit。此时的合并就叫fast forward。

示例:

1. 新建一个work tree,在master中做几次commit
2. 新建develop的branch,然后再做多次commits

此时的分支流图如下(gitx):

正常合并

(master)$ git merge develop 
Updating 5999848..7355122
Fast-forward
c.txt |    1 +
d.txt |    1 +
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 c.txt
create mode 100644 d.txt

可以看出这是一次fast-forward式的合并,且合并完之后的视图为扁平状,看不出develop分支开发的任何信息。

使用–no-ff进行合并

—no-ff (no fast foward),使得每一次的合并都创建一个新的commit记录。即使这个commit只是fast-foward,用来避免丢失信息。

(master)$ git merge –no-ff develop
Merge made by recursive.
c.txt | 2 +-
d.txt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

可以看出,使用no-ff后,会多生成一个commit 记录,并强制保留develop分支的开发记录(而fast-forward的话则是直接合并,看不出之前Branch的任何记录)。这对于以后代码进行分析特别有用,故有以下最佳实践。

好的实践

–no-ff,其作用是:要求git merge即使在fast forward条件下也要产生一个新的merge commit。此处,要求采用–no-ff的方式进行分支合并,其目的在于,希望保持原有“develop branches”整个提交链的完整性。Git – Fast Forward 和 no fast foward

时间: 2024-10-12 15:48:34

Git – Fast Forward 和 no fast foward的相关文章

关于fast forward和no fast forward

http://ariya.ofilabs.com/2013/09/fast-forward-git-merge.html http://stackoverflow.com/questions/2850369/why-does-git-fast-forward-merges-by-default 默认使用fast forward,在可能的情况下,是不会生成一个新的commit的

【Todo】git的fast forward & git命令学习

git的fast-forward在之前的文章有介绍过,但是介绍的不细: http://www.cnblogs.com/charlesblc/p/5953066.html fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并.属于"快进方式",不过这种情况如果删除分支,则会丢失分支信息.因为在这个过程中没有创建commit squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么

git教程5-提交与no fast forward融合

每一个提交相当于一个版本,版本都有版本号与之对应.通常通过git commit -m "name"为每次提交命名. no fast forward 融合使得主分支与次分支每次提交都能够被记录下来,而不会让主分支覆盖次分支. 几个重要的命令: 1.根据版本号查看某个版本: git reset --hard versionID 2.查看版本之间的关系图 git log --graph --pretty==online --abbrev--commit 3.no fast forward融合

Git 分支管理 分支管理策略 不使用Fast forward模式进行合并

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit, 这样,从分支历史上就可以看出分支信息. 下面我们实战一下--no-ff方式的git merge -- 首先,仍然创建并切换dev分支: $ git checkout -b dev --- 修改readme.txt文件,并提交一个新的commit: ---- 现在,我们切换回master: -

Fast邀请码,Fast卡密获取途径及使用方法!

Fast邀请码:113118 请大家用正规的邀请码注册避免造成不必要的损失 (Fast官网唯一指定注册邀请码:113118) 建议官方取卡:http://t.cn/EqPmfEH 最近大家都在问Fast是什么?Fast邀请码多少113118? Fast卡密是什么?Fast卡密购买分享怎样获取? Fast充值哪里找?Fast月卡在哪里?Fast续费怎么弄? 生肖鸡怎么防范小人 "亲正人,远小人",这是古人抵挡小人最含蓄的一招,殊不知已经不在适应当今这个经济发展迅速的社会了,防范小人咱们更

git 入门宝典

目录: git 简介    git 安装    git的基本构成    git的基本操作        基本命令        vi命令        创建版本库        添加文件        提交文件        查看状态        查看提交日志        查看更改对比        版本回滚        撤销操作        删除操作    远程仓库        认识github        克隆远程仓库        推送与拉取    分支        分支的基

三十八、git merge简介

git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上. 我们可以运行git merge -h查看其命令usage: git merge [options] [<commit>...]    or: git merge [options] <msg> HEAD <commit>    or: git merge --abort -n                    do not show a diffstat at the end of

git merge简介(转)

git merge的基本用法为把一个分支或或某个commit的修改合并现在的分支上.我们可以运行git merge -h和git merge --help查看其命令,后者会直接转到一个网页(git的帮助文档),更详细.usage: git merge [options] [<commit>...]   or: git merge [options] <msg> HEAD <commit>   or: git merge --abort -n               

git merge简介

git merge的基本用法为把一个分支或或某个commit的修改合并到现在的分支上.我们可以运行git merge -h和git merge --help查看其命令,后者会直接转到一个网页(git的帮助文档),更详细.usage: git merge [options] [<commit>...]   or: git merge [options] <msg> HEAD <commit>   or: git merge --abort -n