廖雪峰Lec11:创建和管理分支
git branch dev //创建分支命名为:dev
git checkout dev //将指针HEAD由当前分支切换到dev
git branch //查看当前分支目录,应该有master和dev
cat readme.txt //查看内容,记为view1
修改readme.txt
git add readme.txt
git commit -m "branch test" //对readme.txt修改提交到当前分支dev
git checkout master //切换到master
cat readme.txt //查看内容,可以发现与view1相同
git merge dev //将分支dev合并到当前分支master
git branch -d dev //删除分支dev
git branch //只剩下master
小结
Git鼓励大量使用分支:
查看本地分支:git branch
查看本地和远程分支:git branch -a
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
廖雪峰Lec12:解决冲突
git checkout -b feature1 //创建并切换分支
修改readme.txt //记为修改1
git add readme.txt
git commit -m "modification1"
git checkout master //切换到master
修改readme.txt //记为修改2
git add readme.txt
git commit -m "modification2"
git merge feature1 //合并分支,此处会提示冲突,因为master和feature1内容为两个版本
git status //status也会提示有冲突
cat readme.txt
vi readme.txt //查看并手动解决冲突
git add readme.txt
git commit -m "fixed conflict" //解决冲突重新提交
git log --graph --pretty=oneline --abbrev-commit //用带参数的git log //查看分支的合并情况
git branch -d feature1 //删除分支feature1
廖雪峰Lec13:分支管理策略
git checkout -b dev //创建新分支
vi readme.txt //修改readme.txt
git add readme.txt
git commit -m "add merge"
git checkout master //切换回master
git merge --no-ff -m "merge with no-ff" dev //使用带参数的merge,no-ff表示不适用fastforward
git log --graph --pretty=oneline --abbrev-commit //查看分支合并情况
小结
1.实际开发中,master应该是非常稳定的一个分支,只用来发布新版本,平时不能在上面干活;
干活都是在dev分支上,也就是说dev分支是不稳定的,小伙伴们时不时更新dev,发布1.0版本时再合并到master上;
小伙伴们各自建立自己的分支比如:LuffysMan,Lisann
2.合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
廖雪峰Lec14:Bug分支
//假设当前正在进行readme.txt 2.0版本的制作,处于分支dev,突然接到代号101bug修复任务,要求紧急修复master上readme.txt的一个bug
git status //处于分支dev,且readme.txt 已被修改
git stash //保存当前工作状态到另一个。。平行宇宙吧
git status //查看状态,工作区是干净的
git checkout master //在master上创建issue101分支用来修复bug
git checkout -b issue101
vi readme.txt //修复bug
git add readme.txt
git commit -m "fix bug101"
git checkout master
git merge --no-ff -m "merged bug fix 101" issue101 //合并分支到master
git branch -d issue101
git checkout dev //切换回dev准备继续readme.txt 2.0版本的制作~~
git status //发现工作区是空的
git stash list //查看保存到平行宇宙的工作
git stash pop //从平行宇宙取回工作哈哈
git stash list //平行宇宙里面是空的
小结
对此场景有疑问的,我觉得这个网友的说法还挺好滴(下面内容来自Shi_Chunyuan)
1、master 上面发布的是A的1.0版本
2、dev 上开发的是A的2.0版本
3、这时,用户反映 1.0版本存在漏洞,有人利用这个漏洞开外挂
4、需要从dev切换到master去填这个漏洞,正常必须先提交dev目前的工作,才能切换。
5、而dev的工作还未完成,不想提交,所以先把dev的工作stash一下。然后切换到master
6、在master建立分支issue101并切换.
7、在issue101上修复漏洞。
8、修复后,在master上合并issue101
9、切回dev,恢复原本工作,继续工作。
补充:git stash pop 等同于 git stash apply, git stash drop
廖雪峰Lec15:Feature分支
//你正在dev上码代码,突然boss让你开发一个新的NB Game; OK,fine,let's do it
git status //处于dev
git branch -b feature-nbgame //新建分支用于开发nbgame!
vi nbgame.py //成功搞定
git add nbgame.py
git commit -m "add nbgame"
git checkout dev //cao,boss说资金不够,nbgame项目取消,代码要删除;OK,f(f)i(u)n(c)e(k)
git branch -d feature-nbgame //纳尼,删除不了?
git branch -D feature-nbgame //用大写参数-D即可
小结
开发一个新的feature,最好新建一个分支
如果要丢弃一个没有合并过的分支,可以通过git branch -D feature-name 强行丢弃