Mac中Git的简单实用(6) --- 分支管理策略

今天我来介绍下Git,Git是一款免费、开源的分布式版本控制系统。
我们在上一个学习了Git分支冲突管理。
这一章,我们要学习Git的Fast-forward模式、保存恢复现场  、测试的feature分支。

Mac中Git的简单实用(1) — Git基本命令(1)

Mac中Git的简单实用(2) — Git基本命令(2)

Mac中Git的简单实用(3) — Github远程仓库

Mac中Git的简单实用(4) — 分支branch管理

Mac中Git的简单实用(5) — Git分支冲突管理


1、Fast forward模式

对于我们上一章学习merge命令,其实是使用Fast-forward模式,合并方式是“快进模式”。
我们要学习禁用Fast-forward模式:
    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

下面我们实战一下–no-ff方式的git merge:

首先我们创建一个名称为dev的分支:
    MBP:git qiuyu$ git checkout -b dev
    切换到一个新分支 ‘dev‘ 

修改git.txt并提交一个新的commit:
    git is ok.
    git is nice.
    change branch.
    using master.
    using branch1.
    the latest.
    test no fast-forward.

    MBP:git qiuyu$ git add git.txt
    MBP:git qiuyu$ git commit -m "no fast-forward"
    [dev d60705f] no fast-forward
     1 file changed, 1 insertion(+), 1 deletion(-)

现在,我们切换回master:
    MBP:git qiuyu$ git checkout master
    切换到分支 ‘master‘
    您的分支与上游分支 ‘origin/master‘ 一致。

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
    MBP:git qiuyu$ git merge --no-ff -m "merge with no-ff" dev
    Merge made by the ‘recursive‘ strategy.
    git.txt | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-) 

合并后,我们用git log看看分支历史:
    MBP:git qiuyu$ git log --graph --pretty=oneline --abbrev-commit
    *   03d3111 merge with no-ff
    |\
    | * d60705f no fast-forward
    |/
    *   33605db the lateset
    |\
    | * b00c593 branch1
    * | 89519de master
    |/
    * d2ba8f0 branch test
    * e5798f6 the third release
    * f49806e the second release
    * 4644630 the first release

首先,master分支一般只进行提交,而不进行工作。

那在哪进行工作呢?工作都在dev分支上,工作结束,再把dev分支合并到master上,在master分支发布。

你和你的同事每个人都在dev分支上工作,每个人都有自己的分支,时不时地往dev分支上合并就可以了。


2、保存恢复现场

当出现bug我们需要修改,,你可以创建一个分支来修复它

但是,当前正在dev上进行的工作还没有提交

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

先修改git.txt
    git is ok.
    git is nice.
    change branch.
    using master.
    using branch1.
    the latest.
    test no fast-forward.
    test git stash.

MBP:git qiuyu$ git status
位于分支 master
您的分支领先 ‘origin/master‘ 共 2 个提交。
  (使用 "git push" 来发布您的本地提交)
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    修改:     git.txt

通过git stash保存现场:
MBP:git qiuyu$ git stash
Saved working directory and index state WIP on master: 03d3111 merge with no-ff
HEAD 现在位于 03d3111 merge with no-ff
MBP:git qiuyu$ git status
位于分支 master
您的分支领先 ‘origin/master‘ 共 2 个提交。
  (使用 "git push" 来发布您的本地提交)

我们下面创建一个分支来修改并提交:
    MBP:git qiuyu$ git checkout -b debug01
    切换到一个新分支 ‘debug01‘
    MBP:git qiuyu$ git add git.txt
    MBP:git qiuyu$ git commit -m "debug01"
    [debug01 cfe4639] debug01
     1 file changed, 1 insertion(+)

我们再切换到master分支并删除debug01:
    MBP:git qiuyu$ git checkout master
    切换到分支 ‘master‘
    您的分支领先 ‘origin/master‘ 共 2 个提交。
      (使用 "git push" 来发布您的本地提交)
    MBP:git qiuyu$ git merge --no-ff -m "debug01" debug01
    Merge made by the ‘recursive‘ strategy.
     git.txt | 1 +
     1 file changed, 1 insertion(+)
    MBP:git qiuyu$ git branch -d debug01
    已删除分支 debug01(曾为 cfe4639)。

工作现场通过git stash list命令看看:
    MBP:git qiuyu$ git stash list
    [email protected]{0}: WIP on master: 03d3111 merge with no-ff

工作现场的恢复:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:
MBP:git qiuyu$ git stash list
[email protected]{0}: WIP on master: 03d3111 merge with no-ff
MBP:git qiuyu$ git stash pop
自动合并 git.txt
冲突(内容):合并冲突于 git.txt

通过之前消除冲突的方法即可解决。

3、测试的feature分支

如果你希望在当前分支中添加一个实验代码,不想把master弄乱,

每添加一个新功能,最好新建一个分支,在上面开发,完成后,合并,最后,删除该分支。

创建一个分支branch1:
MBP:git qiuyu$ git checkout -b branch1
切换到一个新分支 ‘branch1‘

创建一个test.c的文件,进行提交:
MBP:git qiuyu$ vi test.c
MBP:git qiuyu$ git add test.c
MBP:git qiuyu$ git status
位于分支 branch1
要提交的变更:
  (使用 "git reset HEAD <文件>..." 撤出暂存区)
    新文件:   test.c
MBP:git qiuyu$ git commit -m "add test"
[branch1 004cc16] add test
 1 file changed, 1 insertion(+)
 create mode 100644 test.c

这时候测试分支需要丢弃,则需要使用git branch -D 命令:
首先切回master:
MBP:git qiuyu$ git checkout master
切换到分支 ‘master‘
您的分支与上游分支 ‘origin/master‘ 一致。

对branch1进行删除:
MBP:git qiuyu$ git branch -d branch1
error: 分支 ‘branch1‘ 没有完全合并。
如果您确认要删除它,执行 ‘git branch -D branch1‘。
MBP:git qiuyu$ git branch -D branch1
已删除分支 branch1(曾为 004cc16)。
时间: 2024-10-25 23:05:05

Mac中Git的简单实用(6) --- 分支管理策略的相关文章

git 教程(15)--分支管理策略

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

【Git管理篇】GitLab 版本分支管理策略(二)

我们采用目前的保留的分支体系:   master . develop(将feature.hotfix合到develop).release 一.代码分支 分支 说明 创建来源分支 代码来源 目标分支 代码输入方式 生命周期 命名规则★ ★master 主干分支,通常作为代码基线,所有发布的代码最终都会合并到此分支. 无 release.hotfix develop Pull request 长期 Master ★develop 开发分支,通常作为其他分支的源分支,也最终会合并回此分支 无 feat

关于git的简单实用

这里主要介绍的是 "开源中国"的使用  ;其实就相当于github的中国版.只不过服务器在中国 ,所以速度上稍微快一些. 好 废话不多说直接上代码 ! 整个过程都是在Mac终端中完成: 首先 .要创建一个文件夹用来装我们的项目  在创建项目之前我们先来熟悉一下终端的帮助功能 , 在终端中 如果想调出git 的帮助直接可以输入 git help指令 这样就可以调出关于git的所有帮助 如果 知道详细的某个关键字怎么使用也很简单 直接输入git help checkout *退出输入wq

GIt分支管理策略

大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msysgit.0.所有软件请到这里下载:http://msysgit.github.io/. 1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对

Git之(四)分支管理

当我们初始化Git仓库的时候,Git会默认创建一个名为master的主分支.在实际工作中,主分支要求是一个稳定.健壮.安全的主线,一般不允许在主分支上直接进行开发,而是拉取一个新的分支,开发.测试完成后,再将分支合并到主分支上. 使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间. Git 的分支模型可称为"必杀技特性",而正是因为该特性将 Git 从版本控

Git工程开发实践(四)——Git分支管理策略

Git工程开发实践(四)--Git分支管理策略 一.Git版本管理的挑战 Git是非常优秀的版本管理工具,但面对版本管理依然有非常大得挑战.工程开发中,开发者彼此的代码协作必然带来很多问题和挑战:A.如何开始一个Feature开发,而不影响其它Feature?B.由于很容易创建新分支,分支多了如何管理,时间久了,如何知道每个分支是干什么的?C.哪些分支已经合并回了主干?D.如何进行Release的管理?开始一个Release的时候如何冻结Feature, 如何在Prepare Release的时

[转]Git分支管理策略

如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件,Git有很多优点.其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用. 但是,太方便了也会产生副作用.如果你不加注意,很可能

分支管理策略

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

SVN分支管理策略个人见解

本篇目录 前言 SVN分支管理策略 VisualSVN Server TortoiseSVN客户端 Repository的创建 Check out trunk创建新项目MyProject trunk更新提交更新,迭代版本创建Tag V1.0 基于Tag的Hotfix Branch Hotfix Branch改动Marge(合并)到trunk中同时创Tag_V1.1进行发布 定制化分支Customize branch 总结 前言 使用svn做为源码管理工具已有几年,但一直都只是使用到了trunk.