在多人开发的环境下,良好的管理机制是必须的。
分支管理策略
1. master
- 主分支-用于发布版本
- 发布版本时打一个tag
- 远程同步
2.dev
- 开发分支-用于开发
- 远程同步
3.user's dev
- 个人的开发分支-合并到
dev
上 - 不需要远程同步
4.feature
- 新功能分支-用于开发新功能
- 如需多人开发,则远程同步,否则无需远程同步
5.bug
- 专门用于修改bug
- 不需要远程同步
注意事项
工作现场
JillZsy
分支开发到一半,需要临时改个bug,那就把目前的工作区存储下来
$ git stash
切换到dev
开bug
分支修改bug,修改提交完成之后,再回到JillZsy
分支
查看保存的工作现场
$ git stash list
stash@{0}: WIP on dev: 7a3972a readme tee
stash@{1}: WIP on dev: 7a3972a readme tee
Git把stash内容存在某个地方,类似于栈。恢复工作现场有两种方法:
-
apply
+drop
--apply
恢复不删除stash内容,drop
删除stash内容 -
pop
-- 恢复同时删除stash内容
//默认最后存储的stash@{1}
$ git stash apply
$ git stash drop
//指定某个stash
$ git stash apply stash@{0}
$ git stash drop stash@{0}
---------------------------------------------------------
$ git stash pop //此时pop:stash@{1}
//指定某个stash
$ git stash pop stash@{0}
分支远程同步问题(以dev为例)
1.user1
推送分支到远程仓库
$ git push origin dev
-
user2
获取分支
- 必须创建远程
origin
的dev
分支到本地 -
pull
代码 -
pull
报错的话,关联本地dev
分支与origin/dev
分支
//创建远程`origin`的`dev`分支到本地
$ git checkout -b dev origin/dev
//pull
$ git pull
//关联`dev`与`origin/dev`
$ git branch --set-upstream-to=origin/dev dev
使用--no-ff
强制禁用Fast forward
,git log --graph --pretty=oneline --abbrev-commit
能看到分支信息
//Fast forward
$ git merge dev
$ git log --graph --pretty=oneline --abbrev-commit
* 3e32c20 (HEAD -> master, dev) dev readme modify //无分支信息
* c3b3ef8 new Project
//禁用Fast forward
$ git merge --no-ff -m "merge no-ff" dev
$ git log --graph --pretty=oneline --abbrev-commit
* d439267 (HEAD -> master) merge no-ff
|\
| * 5bea520 (dev) dev readme modify too //有分支信息
|/
* c3b3ef8 new Project
rebase
push之前
把分叉的log整理成一条直线。更加直观。
$ git log --graph --pretty=oneline --abbrev-commit
* fac28d0 (HEAD -> master) dev merge no-ff
|\
| * 5b00cb5 (dev) dev readme modify
|/
* c3b3ef8 new Project
//对于未push到远程的log有效
$ git rebase
$ git log --graph --pretty=oneline --abbrev-commit
* 759e900 (HEAD -> master) dev readme modify
* c3b3ef8 new Project