在 上一篇文章 中,我们演示了 git 在本地操作中的一些基本命令,本文将在聚焦与 git 中分支相关的操作。
当初始化一个项目时,只存在一个名为 master 的主分支。
建立分支
在项目的新版本中,计划使用 hapi 框架来代替原有的 node.js 原生 HTTP 库。为了不影响现有的项目维护,我们决定建立一个分支来管理新的开发。
使用以下命令建立一个名为 hapi 的分支:
以上命令相对于执行了 git branch hapi 和 git checkout hapi 两个命令
系统提示:
1 2
| M server.js Switched to a new branch 'hapi'
|
执行 branch 指令查看分支:
系统显示:
1 2
| * [[32mhapi[[m master[[m
|
可以看到,当前项目有两个分支,带 * 号的是当前分支。
在项目中使用 hapi 框架
使用 hapi 框架,修改后的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| const Hapi = require('hapi') const Joi = require('joi') const HAPIWebSocket = require("hapi-plugin-websocket") const WebSocket = require("ws")
const store = require('./store');
const server = new Hapi.Server({host:'localhost', port: 80, routes: {cors: true }} );
function buildResult() { return { succ: false, msg: '', data: undefined, } };
(async () => {
await server.register(HAPIWebSocket);
server.route({ method: 'GET', path: '/todos', handler: (request, h) => {
var result = buildResult(); result.succ = true; result.data = store.listAll(); return result; } })
server.route({ method: 'GET', path: '/todos/{id}', handler: (request, h) => {
var result = buildResult();
var todo = store.get(request.params.id); if (todo != undefined) { result.succ = true; result.data = todo; }
return result; } })
server.route({ method: 'POST', path: '/todos', handler: (request, h) => {
const data = request.payload;
var todo = store.create(data);
var result = buildResult(); result.succ = true; result.data = todo;
return result; } })
server.route({ method: 'PUT', path: '/todos/{id}', handler: (request, h) => {
const data = request.payload;
store.update(data);
var result = buildResult(); result.succ = true;
return result; } })
server.route({ method: 'DELETE', path: '/todos/{id}', handler: (request, h) => {
const data = request.payload;
store.remove(data);
var result = buildResult(); result.succ = true;
return result; } })
server.route({ method: 'POST', path: '/account/reg', handler: (request, h) => {
const data = request.payload;
var account = store.register(data.name, data.password); var result = buildResult(); if (account != undefined) { result.succ = true; } return result; } })
server.route({ method: 'POST', path: '/account/login', handler: (request, h) => {
const data = request.payload;
var token = store.login(data.name, data.password); var result = buildResult(); if (token != undefined) { result.succ = true; result.data = token; } return result; } })
await server.start();
})().catch((err) => { console.log(`ERROR: #123;err}`) })
|
提交改变到分支,执行:
1 2
| git add server.js git commit -m "use hapi framework"
|
切换到 master 分支
为从 hapi 分支切换到 master 分支,执行:
系统显示:
1
| Switched to branch 'master'
|
再检查 server.js, 可以看到 server.js 还是原来的内容。
合并 hapi 分支到 master
如果 hapi 的功能已经开发完成,准备上线了,这时会考虑合并 hapi 分支的内容到 master 中, 执行:
系统提示:
1 2 3 4
| Updating 331b541..6cb1522 Fast-forward server.js | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 170 insertions(+), 9 deletions(-)
|
查看 server.js 的内容,可以看到内容已经是 hapi 中的内容了。
注意:默认使用的是 Fast-forward模式
处理冲突
现在我们在 master 分支上改变一些内容, 比如删除一个 route ‘DELETE’, 保存并提交。
切换到 hapi 分支,在 server.js 中的返回对象中加一个 code 的属性:
1 2 3 4 5 6 7 8
| function buildResult() { return { succ: false, msg: '', code: '', data: undefined, } };
|
保存并提交。
1 2
| git add server.js git commit -m "remove 'Delete' method"
|
1 2
| git add server.js git commit -m "add attribute 'code' in result object"
|
再切换到 master 分支,执行以下命令合并 hapi 分支:
1
| git merge hapi -m "use new result struct"
|
系统提示:
1 2 3 4
| Auto-merging server.js Merge made by the 'recursive' strategy. server.js | 1 + 1 file changed, 1 insertion(+)
|
删除分支
执行以下命令删除分支:
系统提示:
1
| Deleted branch hapi (was e630430).
|
再用 git branch 命令查看,发现只有一个 master 分支了。