`
李大宝
  • 浏览: 14435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

git分支策略

    博客分类:
  • GIT
阅读更多

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

 

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

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

首先,仍然创建并切换dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

 修改readme.txt文件,并提交一个新的commit:

$ git commit readme.txt -m "branch manager"
[dev 4c49945] branch manager
 1 file changed, 1 insertion(+)

 

现在,我们切换回master

$ git checkout master
Switched to branch 'master'

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

$ git merge --no-ff -m "merger with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

合并后,我们用git log看看分支历史:

$  git log --graph --pretty=oneline --abbrev-commit
*   7fbc277 merger with no-ff
|\
| * 4c49945 branch manager
|/
*   0f3d64a fixed conflicts
|\
| * b4309b0 create new branch feature1 first modify
* | 0b56936 goback master first modify
|/
* 45ae9a9 create new branch....
* 90bc1f7 test name
.......

 

 

Bug分支

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号001的bug的任务时,很自然地,你想创建一个分支bug-001来修复它,但是,等等,当前正在dev上进行的工作还没有提交:

$ git status
On branch dev
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?

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

$ git stash
Saved working directory and index state WIP on dev: e980635 dev
HEAD is now at e980635 dev

 

现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。

 

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 9 commits.
  (use "git push" to publish your local commits)

 

$ git checkout -b bug-001
Switched to a new branch 'bug-001'

 

现在修复bug,需要把“git branch manager....”改为“git branch manager....modify”,然后提交:

$ git add readme.txt
$ git commit -m "bug modify"
[bug-001 3b8d00c] bug modify
 1 file changed, 1 insertion(+), 1 deletion(-)

 

 修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 9 commits.
  (use "git push" to publish your local commits)
$ git merge --no-ff -m "merge bug fix 001" bug-001
Merge made by the 'recursive' strategy.
 readme.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

 

太棒了,原计划两个小时的bug修复只花了5分钟!现在,是时候接着回到dev分支干活了!

$ git checkout dev
Switched to branch 'dev'
$ git status
On branch dev
nothing to commit, working directory clean

工作区是干净的,刚才的工作现场存到哪去了?用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: e980635 dev

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

$ git stash  pop
On branch dev
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (9bfeed878d4c504cf12c67a6965db13506567b4a)

再用git stash list查看,就看不到任何stash内容了:

$ git stash list

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

 

小结

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

 

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

 

Feature分支

软件开发中,总有无穷无尽的新的功能要不断添加进来。

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。

于是准备开发:

$ git checkout -b feature-vulcan
Switched to a new branch 'feature-vulcan'

5分钟后,开发完毕:

$ git add readme.txt
$ git status
On branch feature-vulcan
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   readme.txt
$ git commit -m "add feature-vulcan" [feature-vulcan 939d622] add feature-vulcan 1 file changed, 4 insertions(+), 2 deletions(-)

 

切回dev,准备合并:

$ git checkout dev
Switched to branch 'dev'

一切顺利的话,feature分支和bug分支是类似的,合并,然后删除。

但是,

就在此时,接到上级命令,因经费不足,新功能必须取消!

虽然白干了,但是这个分支还是必须就地销毁:

$ git branch -d feature-vulcan
error: The branch 'feature-vulcan' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.

销毁失败。Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用命令git branch -D feature-vulcan

现在我们强行删除:

$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 939d622).

小结

开发一个新feature,最好新建一个分支;

 

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

 

 

分享到:
评论

相关推荐

    git分支管理策略

    git分支管理策略,git分支管理策略,git分支管理策略,git分支管理策略

    git分支版本管理.pdf

    在企业环境中,Git 分支策略是确保项目高效、稳定推进的关键。以下是对"git分支版本管理.pdf"中提到的知识点的详细说明: 1. **主分支(master)**: 主分支代表了项目的正式发布版本,通常是最稳定的代码库,只...

    分支管理规范-GIT分支流程开发规范

    通过规范化的分支策略,可以避免代码冲突,保证代码质量,并简化错误修复和新功能的集成过程。 2. **必读文章** 在深入理解这一规范之前,建议阅读以下Git基础和最佳实践的文章: - 《Git工作流基础》:理解Git的...

    Git分支管理的策略梳理

    Git分支管理的策略梳理 Git分支管理的策略梳理是非常重要的,因为 Git 的分支和合并功能非常强大,但如果不加注意,很可能会留下一个枝节蔓生、四处开放的版本库,到处都是分支,完全看不出主干发展的脉络。因此,...

    一个成功的git分支模型收集.pdf

    - 明确的分支策略降低了合并冲突的风险,提高了代码质量。 - 特性分支使并行开发成为可能,提高了开发效率。 - 发布和热修复分支确保生产环境的稳定性,同时不影响开发进度。 总之,这个成功的Git分支模型通过...

    07.Git分支规范1

    本篇文章将探讨一种常见的Git分支规范——GitFlow,并结合给定的现状分析,解释如何优化分支使用。 1. **现状与问题**: - **Master分支**:作为发布版本的源码,应始终保持稳定,但在实际操作中,master分支没有...

    Git分支管理策略 - 阮一峰的网络日志

    在阮一峰的网络日志中,作者详细讨论了Git分支管理的策略,旨在保持版本库的演进简洁有序。以下是从文章中提取的关键知识点: 1. 版本管理系统的重要性:文章首先强调了版本管理系统在软件开发过程中的必要性,尤其...

    浅谈Git分支管理策略

    首先,一个健康的Git分支策略应基于两个主要的常设分支:Master和Develop。Master分支被视为代码库的“黄金主线”,它存储着面向用户的正式版本,每次发布新版本时,都会从此分支发布。Develop分支则用于日常开发...

    什么是成功的Git分支模型

    在这篇文章中,我提出一个开发模型。我已经将这个开发模型引入到我所有的项目里(无论 在工作还是私人...我不会讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容。 它主要体现了Git对我们源代码版本的管理。

    Git分支合并和命令.docx

    #### 二、Git分支使用策略 **分支使用策略**通常是团队合作的基础之一,常见的分支模型包括以下几种: - **主分支**(Master/Main):代表项目的主要版本线,只用于发布最终稳定版本。 - **开发分支**(Develop):...

    Pro Git》中文版.

    - 分支策略:了解不同的Git分支策略,如Gitflow、Forking工作流等,适用于不同的开发模式。 - 冲突解决:学习如何处理合并时发生的代码冲突,如何使用Git的工具进行有效解决。 - 变基(Rebasing):理解变基的概念,...

    obsidian-git 插件

    2. 标签与分支:利用 Git 分支策略,为特定主题或项目创建分支,同时利用 Obsidian 的标签系统,对笔记进行分类管理。 3. 解决冲突:在多人协作时可能会遇到冲突,学会使用 Git 的冲突解决机制是必备技能。 4. ...

    git分支管理规范说明资料

    以下是对Git分支管理规范的详细说明: **WHY:为什么进行分支管理** 1. **控制代码提交权限**:通过分支管理,可以限制对主分支(如Master)和tag分支的直接修改,确保提交的代码经过测试验证,减少潜在问题。 2....

    第三章 Git分支_git_分布式存储_

    本章将深入探讨Git分支的概念、创建与合并,以及它如何实现分布式存储。 Git分支是软件开发中的一个灵活工具,它允许开发者在不影响主分支(通常是`master`)的情况下,进行新功能的开发或者问题的修复。在Git中,...

    分支策略::shuffle_tracks_button:分支策略! 对于Git!

    - Mobify是一家专注于移动优化的公司,他们可能有一套针对自身项目的特定Git分支策略,这可能涉及到如何协同处理移动平台的特性和问题。 6. **文件列表**: "branching-strategy-master"可能是一个包含详细分支...

    合并三十分钟:GitHub社区提出了30分钟合并-Git分支策略; 这是一个演示仓库

    基于项目的学习活动,面向开始使用Git进行分支的人员。 您可以在以下位置玩游戏: : 支持的浏览器:Chrome,Firefox,Safari,Opera和IE9 + 这个有趣的开源游戏是从以下网站克隆的: : 初始回购设置(学生) ...

    Git分支操作及团队协作规范1

    1. **分支策略**: - **master 分支**:这是主分支,始终保持稳定状态,通常用于发布可用版本。开发不应直接在这个分支上进行,以防止不稳定代码污染主线。 - **develop 分支**:开发主分支,所有的新功能都基于这...

    ugbc:单向Git分支比较

    在Java开发中,Git分支策略通常被用于实现敏捷开发,例如,主线分支(master或main)保持生产稳定,开发分支(dev)用于新功能的开发,而特性分支(feature)则承载特定功能的实现。UGBC的核心就是对比这些分支,以...

    关于两种CI/CD策略以及git分支模型的思考

    CI/CD(持续集成/持续交付)策略以及git分支模型和以前的项目做一下分析比较,希望对各位有所帮助,也能有所思考,尤其是那些期望 搭建项目部署流水线或者想了解git分支模型的开发、运维人员。 废话不多说,由于近期...

Global site tag (gtag.js) - Google Analytics