@@ -139,7 +139,7 @@ git init
139
139
140
140
![ ] ( ./res/git_repository.png )
141
141
142
- > ** 提示** :用` ls -la ` 查看所有文件会发现在执行完上面的命令后,文件夹下多了一个名为` .git ` 的隐藏文件夹,这个文件夹就是Git版本仓库 。
142
+ > ** 提示** :用` ls -la ` 查看所有文件会发现在执行完上面的命令后,文件夹下多了一个名为` .git ` 的隐藏文件夹,这个就是本地的Git版本仓库 。
143
143
144
144
通过` git add ` 可以将指定的文件或所有文件添加到暂存区。
145
145
@@ -184,7 +184,7 @@ git commit -m '本次提交的说明'
184
184
185
185
``` Shell
186
186
git log
187
- git log --graph --pretty= oneline --abbrev-commit
187
+ git log --graph --oneline --abbrev-commit
188
188
```
189
189
190
190
#### Git服务器概述
@@ -205,7 +205,7 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
205
205
206
206
![ ] ( ./res/gitee-add-members.png )
207
207
208
- 3 . 项目的分支。创建项目后,项目只有一个默认的** master** 分支,应该将该分支设置为“保护分支”来避免项目管理者之外的成员修改该分支。当然,如果需要我们也可以在线创建新的代码分支。
208
+ 3 . 项目的分支。创建项目后,项目只有一个默认的** master** 分支,应该将该分支设置为“保护分支”来避免项目管理者之外的成员修改该分支(不可直接提交) 。当然,如果需要我们也可以在线创建新的代码分支。
209
209
210
210
4 . 设置公钥实现免密访问。在项目的“设置”或“管理”中我们还可以找到“部署公钥管理”的选项,通过添加部署公钥,可以通过SSH(安全远程连接)的方式访问服务器而不用每次输入用户名和口令。可以使用` ssh-keygen ` 命令来创建密钥对。
211
211
@@ -237,8 +237,6 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
237
237
238
238
其中,` -u ` 是` --set-upstream ` 的缩写,用来指定推送的服务器仓库,后面的` origin ` 就是刚才给仓库起的简短的别名,冒号前面的` master ` 是本地分支名,冒号后面的` master ` 是远程分支名,如果本地分支` master ` 已经和远程分支` master ` 建立过关联,则冒号以及后面的部分可以省略。
239
239
240
- > ** 说明** :一般不能直接将工作成果push到` master ` 分支,因为它通常是一个受保护分支。
241
-
242
240
3 . 从远程仓库取回代码。
243
241
244
242
``` Shell
@@ -247,7 +245,7 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
247
245
248
246
#### Git分支操作
249
247
250
- 1 . 创建和切换分支 。下面的命令创建了名为` dev ` 的分支并切换到该分支。
248
+ 1 . ** 创建 ** 和 ** 切换 ** 分支 。下面的命令创建了名为` dev ` 的分支并切换到该分支。
251
249
252
250
``` Shell
253
251
git branch < branch-name>
@@ -262,7 +260,7 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
262
260
263
261
> ** 注意** :在之前的Git版本中,切换分支使用` git checkout <branch-name> ` 命令,也可以通过` git checkout -b <branch-name> ` 来创建并切换分支。` git switch ` 命令目前仍然处于试验性阶段,但很明显这个命令更加清晰的表达了它要做的事情。
264
262
265
- 2 . 关联远程分支 。例如:如果当前所在的分支还没有关联到远程分支,可以使用下面的命令为它们建立关联。
263
+ 2 . ** 关联远程 ** 分支 。例如:如果当前所在的分支还没有关联到远程分支,可以使用下面的命令为它们建立关联。
266
264
267
265
``` Shell
268
266
git branch --set-upstream-to origin/develop
@@ -288,7 +286,7 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
288
286
git branch --unset-upstream < branch-name>
289
287
```
290
288
291
- 3 . 分支合并 。例如在` dev ` 分支上完成开发任务之后,如果希望将` dev ` 分支上的成果合并到` master ` ,可以先切回到` master ` 分支然后使用` git merge ` 来做分支合并,合并的结果如下图右上方所示。
289
+ 3 . 分支 ** 合并 ** 。例如在` dev ` 分支上完成开发任务之后,如果希望将` dev ` 分支上的成果合并到` master ` ,可以先切回到` master ` 分支然后使用` git merge ` 来做分支合并,合并的结果如下图右上方所示。
292
290
293
291
``` Shell
294
292
git switch master
@@ -299,7 +297,7 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
299
297
300
298
在合并分支时,没有冲突的部分Git会做自动合并。如果发生了冲突(如` dev ` 和` master ` 分支上都修改了同一个文件),会看到` CONFLICT (content): Merge conflict in <filename>. Automatic merge failed; fix conflicts and then commit the result ` (自动合并失败,修复冲突之后再次提交)的提示,这个时候我们可以用` git diff ` 来查看产生冲突的内容。解决冲突通常需要当事人当面沟通之后才能决定保留谁的版本,冲突解决后需要重新提交代码。
301
299
302
- 4 . 分支变基 。分支合并操作可以将多个分支上的工作成果最终合并到一个分支上,但是再多次合并操作之后,分支可能会变得非常的混乱和复杂,为了解决这个问题,可以使用` git rebase ` 操作来实现分支变基。如下图所示,当我们希望将` master ` 和` dev ` 上的工作成果统一到一起的时候,也可以使用变基操作。
300
+ 4 . 分支 ** 变基 ** 。分支合并操作可以将多个分支上的工作成果最终合并到一个分支上,但是再多次合并操作之后,分支可能会变得非常的混乱和复杂,为了解决这个问题,可以使用` git rebase ` 操作来实现分支变基。如下图所示,当我们希望将` master ` 和` dev ` 上的工作成果统一到一起的时候,也可以使用变基操作。
303
301
304
302
![ ] ( ./res/git-rebase.png )
305
303
@@ -311,7 +309,7 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
311
309
312
310
当我们在` dev ` 分支执行` git rebase ` 命令时,将首先计算` dev ` 分支和` master ` 分支的差集,然后应用该差集到` dev ` 分支,最后我们切回到` master ` 分支并执行操作合并,这样就看到了如上图右下方所示的干净的分支。
313
311
314
- 5 . 删除分支 。删除分支可以使用` git branch ` 加上` -d ` 参数,如果分支上的工作成果还没有合并,那么在删除分支时会看到` error: The branch '<branch-name>' is not fully merged. ` 这样的错误提示。如果希望强行删除分支,可以使用` -D ` 参数。删除分支的操作如下所示。
312
+ 5 . ** 删除 ** 分支 。删除分支可以使用` git branch ` 加上` -d ` 参数,如果分支上的工作成果还没有合并,那么在删除分支时会看到` error: The branch '<branch-name>' is not fully merged. ` 这样的错误提示。如果希望强行删除分支,可以使用` -D ` 参数。删除分支的操作如下所示。
315
313
316
314
``` Shell
317
315
git branch -d < branch-name>
@@ -327,14 +325,31 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
327
325
git push origin :develop
328
326
```
329
327
328
+ 或者
329
+
330
+ ``` Shell
331
+ git push origin --delete develop
332
+ ```
333
+
330
334
#### Git其他操作
331
335
332
336
1 . ` git fetch ` :下载远程仓库的所有变动,可以将远程仓库下载到一个临时分支,然后再根据需要进行合并操作,` git fetch ` 命令和` git merge ` 命令可以看作是之前讲的` git pull ` 命令的分解动作。
333
337
338
+ ``` Shell
339
+ git fetch origin master:temp
340
+ git merge temp
341
+ ```
342
+
334
343
2 . ` git diff ` :常用于比较工作区和仓库、暂存区与仓库、两个分支之间有什么差别。
335
344
336
345
3 . ` git stash ` :将当前工作区和暂存区发生的变动放到一个临时的区域,让工作区变干净。这个命令适用于手头工作还没有提交,但是突然有一个更为紧急的任务(如线上bug需要修正)需要去处理的场景。
337
346
347
+ ``` Shell
348
+ git stash
349
+ git stash list
350
+ git stash pop
351
+ ```
352
+
338
353
4 . ` git reset ` :回退到指定的版本。该命令主要有三个参数,如下图所示。
339
354
340
355
![ ] ( ./res/git-reset.png )
@@ -435,12 +450,15 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
435
450
``` Shell
436
451
git checkout master
437
452
git merge --no-ff release-0.1
438
- git tag -a 0.1
453
+ git push
439
454
440
455
git checkout develop
441
456
git merge --no-ff release-0.1
457
+ git push
442
458
443
459
git branch -d release-0.1
460
+ git tag -a v0.1 master
461
+ git push --tags
444
462
```
445
463
446
464
4 . 从` master ` 分支创建` hotfix ` 分支,在修复bug后合并到` develop ` 和` master ` 分支(上图右下)。
@@ -458,12 +476,15 @@ Git不像SVN那样一定需要中央服务器才能工作,上面我们演示
458
476
``` Shell
459
477
git checkout master
460
478
git merge --no-ff hotfix-0.1.1
461
- git tag -a 0.1.1
479
+ git push
462
480
463
481
git checkout develop
464
482
git merge --no-ff hotfix-0.1.1
483
+ git push
465
484
466
485
git branch -d hotfix-0.1.1
486
+ git tag -a 0.1.1
487
+ git push --tags
467
488
```
468
489
469
490
Git-flow流程比较容易控制各个分支的状况,但是在运用上github-flow要复杂得多,因此实际使用的时候通常会安装名为` gitflow ` 的命令行工具或者使用图形化的Git工具(如:SmartGit、SourceTree等)来简化操作,具体的可以参考[ 《git-flow 的工作流程》] ( < https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow > ) 一文,因为这篇文章写得已经很好了,本文不再进行赘述。
0 commit comments