【基础积累】Git 开发整理
1. Git 的最小配置
配置基本用户信息
1 | git config --global user.name "louhaojie" |
❝
思考: 为何要做 User 信息配置?
提交代码到 本地仓库时,git 会先检索本地仓库的.git/config 文件,如果没有 user 的信息,则使用全局的配置文件(符合就近原则).
Git 提交都会使用这些信息,它们会写入到你的每一次提交中.
❞
config 的三个配置作用域
缺省等同于 local
1 | git config --local # local只对某个仓库有效 |
查看配置后的 User 信息
显示 config 的配置, 加 –list
1 | git config --list --local |
2. Git 的工作区和暂存区
❝
思考: 什么是工作区?什么是暂存区?
**
工作区
**:工作区就是 git 仓库所在的目录,比如咱们项目目录front-wh-admin
就是一个工作区**
暂存区
**:英文叫 stage, 或 index。一般存放在 “.git 目录下” 下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)**
版本库
**:工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库.
❞
版本控制的内容修改提交流程是:工作区 → 暂存区 → 分支版本历史库
添加到暂存区
1 | git add index.html README.md # 暂存工作区指定的文件 |
添加到对应分支版本历史库
1 | git commit -m "feat: 增加站点文件和项目叙述文件" |
3. 给文件重命名的简洁方法
假设工作目录下有 HelloWorld.html
文件,想重命名为 HelloGit.html
1 | git add HelloGit.html |
1 | git status # 查看暂存状态 |
一般呢,直接只用 git add .
|| git add -u
,很少使用到 git rm
命令来操作重命名的文件或者需要删除的文件.
4. 通过 git log 查看版本演变历史
展示的比较全面,包含 Author
和 Date
以及变更内容的 commit message
1 | git log # 查看版本历史 |
展示一行显示,只包含 commit message
1 | git log --oneline # 查看版本历史 |
查看整个版本历史的整个演变历史
1 | git log --oneline --graph |
5. 快捷清理工作区文件变更和暂存区目录
1 | git reset --hard # 不会破坏 git history, 相当于把暂存区文件取消 + 变更内容都还原 |
6. Git 之分离头指针
如果不小心通过 git checkout 命令切换到某个 commit 中(即 HEAD 指向某个 commit),git 会提示我们正处于分离头指针的状态下(工作在没有分支的情况下),如果我们做了大量的修改,但是某天我们突然又切换到另一个 commit 时,我们的修改就有可能被 git 当做垃圾清除掉,因此这个动作十分危险。
分离头指针的用处:进行尝试性的变更时,但我们试着修改某些文件时,如果觉得修改的效果不满意,可以直接切换到别的分支,丢弃当前修改
记住一点:如果某个变更(提交)是非常重要的,那么一定要跟某个分支绑定在一起
好吧!我们下面实践一下:
语法:git checkout -b 新分支名称
基于某个分支或者commit
1 | git checkout -b feat/login-final master # 创建出新分支, 基于master分支 |
总结:git 分离头指针,简单来说就是 git 当前处于的工作状态,没有跟任何分支进行挂钩.
比较某两个 commit 的区别
语法:git diff 第一个commit
第二个commit
1 | git diff bd1fcbf 8236b08 |
7. 删除不需要的分支
1 | git branch -D <branch name> |
8. 怎么修改最新的 commit 的 message?
❝
思考:什么样的场景下,我们会用到修改 commit message?
有时候我们刚把一个 commit 创建出来之后呢,突然发现我们的 commit message 这个做变更的东西啊,描述的不准确,所以呢,需要对 commit message 进行修改,而且是最近一次的 commit message 修改.
❞
1 | git commit --amend # 修理一下 |
上面命令执行之后,发现无法进行编辑,这时候按下键盘 i 进入文字插入模式
编辑完了?又如何退出呢?
(1)按 Esc
键退出编辑模式,英文模式下输入 :wq
,然后回车
(write and quit)。
(2)按 Esc
键退出编辑模式,大写英文模式下输入 ZZ
,然后回车
。
那我之前的 commit 信息发现 commit message 命名也不太好!那应该怎么进行操作修改呢?
变基操作如下:
1 | // git rebase -i 选择想变更的那个基的父亲的commit索引 |
输入 :wq
保存并退出
然后进入了等同于执行,git commit –amend 界面,对这个 commit 进行修改
然后再输入 :wq
保存并退出
最后:咱们 git log 查看一下,已经修改成功啦!
9. 怎么样把多个commit整理成1个?
场景一:连续的
举例如下:假如说让你完成一个登录功能,开发的途中呢,产生了三个 commit 信息,这个时候呢,就可以把这三个对应的 commit 信息合并成一个,因为呢他们整体是对应 “登录功能开发”,合并成一个 commit 也便于翻阅查看.
step1:
1 | git rebase -i 8236b08 |
❝
思考:你可能会在想,上面的变基操作中,为什么 -i 后面选择
8236b08
而不是6921090
,这是因为如果你想对某个 commit 进行操作,要选择他的 “父级”,好了接下来看执行上面命令之后的界面,如下这里说明一下,终端进入编辑模式按
i
,保存并退出按ESC
然后输入:wq
然后确认键就Ok了!
❝
然后,按 ESC
输入 :wq
保存并退出,进入到另外一个界面中,如下:
然后,我们按 i
进入编辑模式,选择需要保留的 commit 信息,这里也是可以进行 commit message修改的,修改后界面如下:
然后按,ESC
退出编辑模式,输入 :wq
保存并退出,这个时候,咱们所有的工作就都完成啦!
最终:可以 git log 一下,可以看出,咱们多个连续的 commit message 已经合并成为了 1 个.
场景二:不连续的commit
假如说我们想,下面图例中,这两个不连续的 commit message 合并成一个,该怎么操作呢?
step1:
1 | git rebase -i 157d8cda0c32468a824 |
调换后位置的图例:
按键盘 ESC
输入 :wq
保存并退出,然后来到下面这个 commit message 合并编辑的界面,把刚才标注 s 对应的commit message 注释掉即可.
按键盘 ESC
输入 :wq
保存并退出,就完成啦.
最后:咱们 git log 查看一下,已经修改成功啦!