GIT分支管理:分支管理策略、Bug分支、Feature分支

更新时间:2023-06-15 07:49:16 阅读: 评论:0

GIT分⽀管理:分⽀管理策略、Bug分⽀、Feature分⽀通常,合并分⽀时,如果可能,Git会⽤Fast forward模式,但这种模式下,删除分⽀后,会丢掉分⽀信息。
如果要强制禁⽤Fast forward模式,Git就会在merge时⽣成⼀个新的commit,这样,从分⽀历史上就可以看出分⽀信息。
下⾯我们实战⼀下--no-ff⽅式的git merge:
⾸先,仍然创建并切换dev分⽀:
$ git checkout -b dev
Switched to a new branch 'dev'
修改⽂件,并提交⼀个新的commit:
$ git -m "branch manager"
[dev 4c49945] branch manager
1file changed, 1 inrtion(+)
现在,我们切换回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.
< | 1 +
1file changed, 1 inrtion(+)怎么隐藏战绩
因为本次合并要创建⼀个新的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
* 90bc1f7 test name
.
......
可以看到,不使⽤Fast forward模式,merge后就像这样:
分⽀策略
在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:
⾸先,master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活;
那在哪⼲活呢?⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本;
你和你的⼩伙伴们每个⼈都在dev分⽀上⼲活,每个⼈都有⾃⼰的分⽀,时不时地往dev分⽀上合并就可以了。
所以,团队合作的分⽀看起来就像这样:
⼩结
Git分⽀⼗分强⼤,在团队开发中应该充分应⽤。
合并分⽀时,加上--no-ff参数就可以⽤普通模式合并,合并后的历史有分⽀,能看出来曾经做过合并,⽽fast forward合并就看不出来曾经做过合并。
Bug分⽀
软件开发中,bug就像家常便饭⼀样。有了bug就需要修复,在Git中,由于分⽀是如此的强⼤,所以,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。
当你接到⼀个修复⼀个代号001的bug的任务时,很⾃然地,你想创建⼀个分⽀bug-001来修复它,但是,等等,当前正在dev上进⾏的⼯作还没有提交:
$ git status
卖火柴的小女孩作者On branch dev
樱花阁Changes not staged for commit:
(u "git add <file>..." to update what will be committed)
(u "git checkout -- <file>..." to discard changes in working directory)
modified: 
no changes added to commit (u "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.
(u "git push" to publish your local commits)
$ git checkout -b bug-001
Switched to a new branch 'bug-001'
现在修复bug,需要把“git ”改为“git dify”,然后提交:
$ git
$ git commit -m "bug modify"
[bug-001 3b8d00c] bug modify
1file changed, 1 inrtion(+), 1 deletion(-)
修复完成后,切换到master分⽀,并完成合并,最后删除issue-101分⽀:
金翔云
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 9 commits.
(u "git push" to publish your local commits)
$ git merge --no-ff -m "merge bug fix 001" bug-001
Merge made by the 'recursive' strategy.
< | 2 +-
1file changed, 1 inrtion(+), 1 deletion(-)
太棒了,原计划两个⼩时的bug修复只花了5分钟!现在,是时候接着回到dev分⽀⼲活了!
$ git checkout dev
Switched to branch 'dev'
$ git status
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:
猜数游戏
(u "git add <file>..." to update what will be committed)
(u "git checkout -- <file>..." to discard changes in working directory)
modified: 
no changes added to commit (u "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
$ git status
On branch feature-vulcan
Changes to be committed:
(u "git ret HEAD <file>..." to unstage)
modified: 
$ git commit -m "add feature-vulcan"
[feature-vulcan 939d622] add feature-vulcan
1file changed, 4 inrtions(+), 2 deletions(-)
切回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>强⾏删除。

本文发布于:2023-06-15 07:49:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/958733.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:合并   功能   修复   开发
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图