第4章 通过实际操作学习git
4.1 git基本操作
git init
— 初始化仓库
生成 .git 文件夹,这个 .git 目录里管理着当前目录内容所需的仓库数据,在Git中,我们将这个目录的内容成为“附属于该仓库的工作树”。git status
— 查看仓库的状态mkdir abc
创建文件夹abctouch abc.html
创建文件 abc.htmlgit log
— 查看提交日志
(1) 只显示指定目录、文件的日志$ git log README.md
(2)显示文件的具体改动内容$ git log -p
-
git diff
查看工作树和暂存区的区别
不妨养成在$ git commit
之前,$ git diff HEAD
,查看本次提交和上次提交有什么区别
HEAD
是指针,指向当前分支的最新一次提交
4.2分支的操作
-
git branch
— 显示分支一览表 -
$ git checkout -b
创建、切换分支
如果你想以当前的master分支为基础创建新的分支,我们需要用到$git checkout -b
(1)创建 feature-A 分支,并进行提交
$ git checkout -b feature-A //创建分支 feature-A
等同于
$ git branch feature-A //创建分支
$ git checkout feature-A //切换到分支
(2)切换到 master 分支
$git checkout master //checkout 查看
git checkout -
'-' 连字符表示切换回上一个分支
-
git merge
— 合并分支
假设feature-A
这个特性分支开发完毕,想要将他合并到主干分支master
中。
(1)首先切换到master
分支
$git checkout master
(2)然后合并分支, 为了历史记录,需要创建合并提交,因此在合并时加上 --no-ff
参数
$ git merge --no-ff feature-A
咳咳咳!!!!敲黑板,这个时候会进入 vim 编辑器状态,想当时我折腾了半天不知道那是个啥
随后编辑器会启动,用于录入和并提交的信息
,默认信息中已经包含了是从分支合并过来的相关内容,所以保存就好了,然后关闭编辑器
先退出输出状态 Esc,然后进入输入状态 shift + :,最后输入 wq!(保存并退出)
vim命令总结
(3)成功的话,就会看到
4.. git log --graph
— 以图标的形式查看分支
此时此刻很有成就感,成功新建了一个分支,并且合并啦
4.3 更改提交的操作
-
git reset
— 回溯历史版本
如果此时我想创建一个feature-A 的兄弟分支,feature-B,怎么办呢?
那就需要回溯到创建A的分支之前的节点,创建一个B分支,
(1)要让仓库的HEAD、暂存区、当前工作树回溯到制定状态,需要用到git reset --hard
命令,只需要提供目标时间点的哈希值,就可以完全恢复至改时间点的状态。
(2)此时已经恢复到了创建分支A之前的节点,创建分支B
$ git checkout -b feature-B
随便写点什么,并且提交,一定要提交哦,也就是git add
、git commit
,不然没有记录,如果自己不小心把代码搞丢了,是找不到的
(3)分支培育好了,要合并了
---------推进至A分支合并后的状态
git log
命令只能查看以当前状态为终点的历史日志,所以这里要使用 git reflog
命令,查看当前仓库的操作日志 ,寻找此时的哈希值,然后git reset --hard
,之后合并2.
git rebase -i
——压缩历史在合并特性分支之前,如果发现已提交的内容中有些许拼写错误,这可以合并到上一个提交压缩成一个历史记录,来保证历史记录的高效性、正确性。
(1)创建分支C
$ git checkout -b ccc
(2)对文件进行修改(并预留错误),并提交
很小的更改可以直接一次性git commit -am"information"
,不需要git add
, git commit
(3)修正代码中错误
查看一下当前工作区和暂存树中的不同git diff
并提交
$ git commit -am"Fix typo"
漏字错字等失误称作typo,但是历史记录中不需要出现这类信息,所以要合并到上一个历史记录
(4)更改历史
$ git rebase -i HEAD~2
用这种方法执行git rebase
命令,可以选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中打开
将ea3730a
左侧的pick部分删除,改为fixup,保存编辑器里的内容,关闭编辑器