Git学习
基础概念
工作区/暂存区/仓库
🔸工作区(Workspace)就是在电脑里能看到的代码库目录,是我们搬砖的地方,新增、修改的文件会提交到暂存区。
- 在这里新增文件、修改文件内容,或删除文件。
🔸暂存区(stage或index) 用于临时存放文件的修改,实际上上它只是一个文件(.git/index),保存待提交的文件列表信息。
- 用
git add
命令将工作区的修改保存到暂存区。
🔸版本库/仓库(Repository /rɪˈpɑːzətɔːri/ 仓库)Git的管理仓库,管理版本的数据库,记录文件/目录状态的地方,所有内容的修改记录(版本)都在这里。就是工作区目录下的隐藏文件夹.git
,包含暂存区、分支、历史记录等信息。
- 用
git commit
命令将暂存区的内容正式提交到版本库。
Git基本流程
0、准备仓库:创建或从服务端克隆一个仓库。
1、搬砖:在工作目录中添加、修改代码。
2、暂存(git add):将需要进行版本管理的文件放入暂存区域。
3、提交(git commit):将暂存区域的文件提交到Git仓库。
4、推送(git push):将本地仓库推送到远程仓库,同步版本库。
5、获取更新(fetch/pull):从服务端更新到本地,获取他人推送的更新,与他人协作、共享。
git commit -a
指令省略了add
到暂存区的步骤,直接提交工作区的修改内容到版本库,不包括新增的文件。
git fetch
、git pull
都是从远程服务端获取最新记录,区别是git pull
多了一个步骤,就是自动合并更新工作区。
git checkout .
、git checkout [file]
会清除工作区中未添加到暂存区的修改,用暂存区内容替换工作区。
git checkout HEAD .
、 git checkout HEAD [file]
会清除工作区、暂存区的修改,用HEAD指向的当前分支最新版本替换暂存区、工作区。
git diff
用来对比不同部分之间的区别,如暂存区、工作区,最新版本与未提交内容,不同版本之间等。
git reset
是专门用来撤销修改、回退版本的指令,替代上面checkout
的撤销功能。
配置
Git有三个主要的配置文件:三个配置文件的优先级是① < ② < ③
- ① 系统全局配置(--system):包含了适用于系统所有用户和所有仓库(项目)的配置信息,存放在Git安装目录下
C:\Program Files\Git\etc\gitconfig
。 - ② 用户全局配置(--global):当前系统用户的全局配置,存放用户目录:
C:\Users\[系统用户名]\.gitconfig
。 - ③ 仓库/项目配置(--local):仓库(项目)的特定配置,存放在项目目录下
.git/config
配置用户信息:
bash复制代码$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
# 配置完后,看看用户配置文件:
$ cat 'C:\Users\Kwongad\.gitconfig'
[user]
name = Kanding
email = 123anding@163.com
user.name
为用户名,user.email
为邮箱。--global
:config
的参数,表示用户全局配置。如果要给特定仓库配置用户信息,则用参数--local
配置即可,或直接在仓库配置文件.git/config
里修改。
忽略.gitignore
4.3、VSCode中的Git
VSCode自带的Git工具基本已经可以满足日常使用了,既有可视化功能,也能敲命令,习惯了不就不用安装其他GUI工具了。不过还是可以再安装一些VSCode插件,来增强Git功能。
GitLens :在团队项目开发中非常实用,必备!!!用于快速查看代码提交历史记录,在代码上会显示最近的修改信息,包括提交者,只就这一点就值得推荐了。
Git History:可以轻松快速浏览Git文件操作历史记录的工具,可视化展示,操作简单
5.1、创建仓库
创建本地仓库的方法有两种:
- 一种是创建全新的仓库:
git init
,会在当前目录初始化创建仓库。 - 另一种是克隆远程仓库:
git clone [url]
5.2、暂存区add
可以简单理解为,git add
命令就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到仓库。
# 添加指定文件到暂存区,包括被修改的文件
$ git add [file1] [file2] ...
# 添加当前目录的所有文件到暂存区
$ git add .
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
5.3、提交commit-记录
git commit
提交是以时间顺序排列被保存到数据库中的,就如游戏关卡一样,每一次提交(commit)就会产生一条记录:id + 描述 + 快照内容
。
- 🔸commit id:根据修改的文件内容采用摘要算法(SHA1)计算出不重复的40位字符,这么长是因为Git是分布式的,要保证唯一性、完整性,一般本地指令中可以只用前几位(6)。即使多年以后,依然可通过
id
找到曾经的任何内容和变动,再也不用担心丢失了。 - 🔸描述:针对本次提交的描述说明,建议准确填写,就跟代码中的注释一样,很重要。
- 🔸快照:就是完整的版本文件,以对象树的结构存在仓库下
\.git\objects
目录里,这也是Git效率高的秘诀之一。
📢一般情况,每完成一个小功能、一个Bu就可以提交一次,这样会形成比较清晰的历史记录。
🔥指令:
指令 | 描述 |
---|---|
git commit -m '说明' | 提交变更,参数-m 设置提交的描述信息,应该正确提交,不带该参数会进入说明编辑模式 |
git commit -a | 参数-a ,表示直接从工作区提交到版本库,略过了git add 步骤,不包括新增的文件 |
git commit [file] | 提交暂存区的指定文件到仓库区 |
git commit --amend -m | 使用一次新的commit ,替代上一次提交,会修改commit 的hash 值(id) |
git log -n20 | 查看日志(最近20条),不带参数-n 则显示所有日志 |
git log -n20 --oneline | 参数“--oneline ”可以让日志输出更简洁(一行) |
git log -n20 --graph | 参数“--graph ”可视化显示分支关系 |
git log --follow [file] | 显示某个文件的版本历史 |
git blame [file] | 以列表形式显示指定文件的修改记录 |
git reflog | 查看所有可用的历史版本记录(实际是HEAD变更记录),包含被回退的记录(重要) |
git status | 查看本地仓库状态,比较常用的指令,加参数-s 简洁模式 |
5.4、Git的“指针”引用们
Git中最重要的就是提交记录了,其他如标签、分支、HEAD 都对提交记录的“指针”引用,指向这些提交记录,理解这一点很重要。
- 提交记录之间也存在“指针”引用,每个提交会指向其上一个提交。
- 标签 就是对某一个提交记录的的 固定 “指针”引用,取一个别名更容易记忆一些关键节点。存储在工作区根目录下
.git\refs\tags
。 - 分支 也是指向某一个提交记录的“指针”引用,“指针”位置可变,如提交、更新、回滚。存储在工作区根目录下
.git\refs\heads
。 - HEAD:指向当前活动分支(最新提交)的一个“指针”引用,存在在“
.git/HEAD
”文件中,存储的内容为“ref: refs/heads/master
”。
06、远程仓库
https://juejin.cn/post/7195030726096453690
https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md