Git操作实验手册 - 本地常用命令(二)

上一篇文章 中,我们演示了 git 在本地操作中的一些基本命令,本文将在聚焦与 git 中分支相关的操作。

当初始化一个项目时,只存在一个名为 master 的主分支。

建立分支

在项目的新版本中,计划使用 hapi 框架来代替原有的 node.js 原生 HTTP 库。为了不影响现有的项目维护,我们决定建立一个分支来管理新的开发。

使用以下命令建立一个名为 hapi 的分支:

1
git checkout -b hapi

以上命令相对于执行了 git branch hapi 和 git checkout hapi 两个命令

系统提示:

1
2
M	server.js
Switched to a new branch 'hapi'

执行 branch 指令查看分支:

1
git 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: ${err}`)
})

提交改变到分支,执行:

1
2
git add server.js
git commit -m "use hapi framework"

切换到 master 分支

为从 hapi 分支切换到 master 分支,执行:

1
git checkout master

系统显示:

1
Switched to branch 'master'

再检查 server.js, 可以看到 server.js 还是原来的内容。

合并 hapi 分支到 master

如果 hapi 的功能已经开发完成,准备上线了,这时会考虑合并 hapi 分支的内容到 master 中, 执行:

1
git merge hapi

系统提示:

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
git branch -d hapi

系统提示:

1
Deleted branch hapi (was e630430).

再用 git branch 命令查看,发现只有一个 master 分支了。

本文标题:Git操作实验手册 - 本地常用命令(二)

文章作者:Morning Star

发布时间:2019年11月14日 - 07:11

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/git/git-common-operation-2/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。