【Chapter 4】通过实际操作学习 Git

2018-04-19  本文已影响0人  蜘蛛的梦呓

唉~我以为休息几天就不会痛了,看来我还是太天真了,实在是闲不住了,今天重新开始写笔记吧,读者们也注意身体,不要久坐。

第四章 通过实际操作学习 Git

4.1 基本操作

4.2 分支操作

在进行多个并行作业时,我们会用到分支。在这类并行开发的过程 中,往往同时存在多个最新代码状态。

如下图所示,从master分支创建 feature-A 分支和 fix-B 分支后,每个分支中都拥有自己的最新代码。master 分支是 Git 默认创建的分支,因此基本上所有开发都是以这个分支为中心进行的。

不同分支中,可以同时进行完全不同的作业。等该分支的作业完成之后再与 master 分支合并。比如 feature-A分支的作业结束后与 master 合并,如下图所示。

4.3 更改提交的操作

1. 回溯到创建 feature-A 分支前

让我们先回溯到上一节feature-A分支创建之前,创建一个名为 fix-B 的特性分支。

要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用 到 git rest --hard命令。只要提供目标时间点的哈希值 A,就可以完全恢复至该时间点的状态。

$ git reset --hard 65f2814a20db917f2d71457b3e5db95c377f4af9
HEAD is now at 65f2814 Add index

我们已经成功回溯到特性分支(feature-A)创建之前的状态。由于所有文件都回溯到了指定哈希值对应的时间点上,README.md 文件的 内容也恢复到了当时的状态(只有标题的状态)。

2. 创建 fix-B 分支

$ git checkout -b fix-B
Switched to a new branch 'fix-B'

修改 README.md

Hello GitHub

- fix-B

提交文件

$ git add README.md

Jadon@LAPTOP-QTBB80RR MINGW64 ~/Desktop/PyProjects/GitHub/Hello/git-tutorial (fix-B)
$ git commit -m "Fix-B"
[fix-B dfa4302] Fix-B
 1 file changed, 3 insertions(+), 1 deletion(-)

现在的状态如图 4.5 所示。接下来我们的目标是图 4.6 中所示的状 态,即主干分支合并 feature-A 分支的修改后,又合并了 fix-B 的修改。

图4.5 图4.6

3. 推进至 feature-A 分支合并后的状态

首先恢复到 feature-A 分支合并后的状态。不妨称这一操作为“推进 历史”。(什么鬼?)

git log 命令只能查看以当前状态为终点的历史日志。

所以这里 要使用 git reflog 命令,查看当前仓库的操作日志。在日志中找出 回溯历史之前的哈希值,通过 git reset --hard 命令恢复到回溯历 史前的状态。

只要不进行 Git 的 GC(Garbage Collection,垃圾回收), 就可以通过日志随意调取近期的历史状态。

即便开发者错误执行了Git操作, 基本也都可以利用 git reflog 命令恢复到原先的状态。

$ git checkout -
Switched to branch 'master'

$ git reset --hard a120a5c
HEAD is now at a120a5c Merge branch 'feature-A'

当前状态为


4.4 推送至远程仓库

Git 是分散型版本管理系统,但我们前面所学习的,都是针对单一 本地仓库的操作。下面,我们将开始接触远在网络另一头的远程仓库。

远程仓库顾名思义,是与我们本地仓库相对独立的另一个仓库。 让我们先在 GitHub 上创建一个仓库,并将其设置为本地仓库的远程仓库。

在 github 上新建一个名为 git-tutorial 的仓库,并且创建时请不要勾选 Initialize this repository with a README 选项。因为一旦勾 选该选项,GitHub一侧的仓库就会自动生成 README 文件,从创建之初便与本地仓库失去了整合性。

4.5 从远程仓库获取

我们把在 GitHub 上新建的仓库设置成了远程仓库,并向 这个仓库push了 feature-D 分支。现在,所有能够访问这个远程仓库的 人都可以获取 feature-D 分支并加以修改。

接下来我们从实际开发者的角度出发,在另一个目录下新建一个本地仓库,学习从远程仓库获取内容的相关操作。这就相当于我们刚刚执行过 push 操作的目标仓库又有了另一名新开发者来共同开发。

这一章有点长,今天就一章了哈。

上一篇 下一篇

猜你喜欢

热点阅读