上一节《Git学习手记11:查看、克隆、提取、拉回、删除Git仓》
Git最伟大的用处是支持多人协作开发(Collaboration),所以必须理解Git 工作流(workflow),下面一篇文章,非常详细的介绍了
《深入理解学习Git工作流(git-workflow-tutorial)》
一个“好的”工作流的评价标准:轻松解决协作开发问题的同时,不会增大不必要的工作开销
本文主要总结简单常用的集中式工作流(Centralized Workflow)
代码库由服务器上的远程仓库统一管理,所有开发人员在开发代码前,都统一将项目版本库从远程仓库克隆(clone)到本地,开发修改调试完毕后,再推送(Push)回服务器的远程仓。该工作方式,简单易懂、逻辑清晰。
假设有个中央仓:git@github.com:ILoveAmy/LearnGit.git
有三个程序员:Alex、Bobby、Cindy
大家都在自己的文件夹下,启动Git Bash
然后从Git仓Clone 版本库到本地
$ git clone git@github.com:ILoveAmy/LearnGit.git
Alex的工作:
新建一个dev分支
$ git checkout -b dev
接着开始开发工作,新建了AlexFunc.py文件,并添加了readme.txt的说明信息
接着用命令:
$ git status 查看状态
$ git add --all 把所有文件提交到暂存区
$ git commit -m "add AlexFunc.py -- Alex20180403" 提交到版本库
开发工作(dev)做完后,重新切换到主分支(master)
$ git checkout master
转到master分支后,由于所有工作是提交到dev分支的,所以master分支还保留着clone时候的样子
用命令:
$ git merge dev 合并分支,这样master跟dev同步起来
最后用命令:
$ git push origin master 把当天完成的工作推送到远程服务器,结束当天的工作。
Bobby的工作:
$ git checkout -b dev 新建一个dev分支
$ git add --all 把所有文件提交到暂存区
$ git commit -m "add BobbyFunc.py ,Bobby20180403" 提交到版本库
$ git checkout master 转移到master分支
$ git merge dev 合并分支
$ git push origin master 把当天完成的工作推送到远程服务器,但是服务器显示:rejected!(拒绝)
提示信息里面清楚说明:远程库(Remote)里面包含有本地没有的工作,你必须先把远程的工作集成好(git pull)再推送
hint: Updates were rejected because the remote contains work that you do not have locally. This is usually caused by another repository pushing to the same ref. You may want to first integrate the remote changes (e.g., 'git pull ...') before pushing again.
用命令:
$ git pull 从远程拉回版本库并合并到本地
$ git add --all 把所有文件提交到暂存区
$ git commit -m "add Bobby's work, Bobby20180403" 提交到版本库
$ git push origin master 把当天完成的工作推送到远程服务器,由于冲突都解决好了,所以提交成功,如下所示:
Cindy的工作:
$ git checkout -b dev 新建一个dev分支
$ git add --all 把所有文件提交到暂存区
$ git commit -m "add CindyFunc.py, Cindy20180403" 提交到版本库
$ git checkout master 转移到master分支
$ git merge dev 合并分支
$ git commit -m "add CindyFunc.py, Cindy20180403"
$ git pull 从远程拉回版本库并合并到本地
$ git add --all 把所有文件提交到暂存区
$ git commit -m "add Cindy work, Cindy20180403" 提交到版本库
$ git push origin master 把当天完成的工作推送到远程服务器
下图展示了整个流程
用命令
$ git log --graph --pretty=oneline --abbrev-commit
可以看到分支合并情况