Git笔记---简单介绍与基本使用
1. 什么是Git
一句话,Git 是目前最流行的分布式版本控制系统。也就是帮助我们维护代码各个版本的工具,尤其是在与他人协作开发的过程中,能协助我们进行高效的代码管理。
Ubuntu安装git:
sudo apt install gitGit 工作流程围绕「3 个本地区域」和「1 个远程仓库」展开:
| 区域 | 作用 |
| 工作区(Workspace) | 你本地编辑代码的文件夹(看得见、能修改) |
| 暂存区(Index) | 临时存放要提交的修改(介于工作区和版本库之间) |
| 版本库(Repository) | 本地仓库,保存所有提交记录(.git 文件夹) |
| 远程仓库(Remote) | 云端仓库(如 GitHub/GitLab) |
2. 基本操作
2.1 创建并初始化本地仓库
- 新建项目文件夹(工作区,也即你需要使用git管理的文件夹),进入文件夹:
mkdir workspace && cd workspace - 初始化 Git 仓库(生成隐藏的 .git 文件夹,管理版本):
初始化完成后,git会在当前目录下创建一个" .git "隐藏文件,这其实就是所谓的本地仓库:git init
- 配置用户名和邮箱(Git 需识别提交者身份):
# 配置用户名(建议与远程仓库账号一致,如 GitHub 用户名) git config user.name "你的用户名"# 配置邮箱(建议与远程仓库绑定邮箱一致) git config user.email "你的邮箱地址"# 全局配置(为配置本地仓库时默认使用全局配置) git config --global user.name "你的用户名"git config --global user.email "你的邮箱地址"
2.2 提交本地代码到版本库
- 查看工作区状态,确认工作区是否有可提交的文件:
git status - 将文件添加到暂存区:
git add file - 将暂存区文件提交到版本库(必须写提交信息,说明修改内容):
git commit -m "修改信息" - 查看已提交版本的日志:
git log [--pretty=oneline] # 注:--pretty=oneline表示以更具可读性的一行形式打印日志
3. 本地仓库(.git)
接下来,我们需要介绍.git中的几个重要字段,以帮助我们更好地理解git的工作原理:
shishen@hcss-ecs-b8e6:~/113code/blog/workspace$ tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ ├── push-to-checkout.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── master
├── objects
│ ├── e1
│ │ └── d7b5a4daa40482c6626cfedc944ca2b714cce2
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── f9
│ │ └── 3e3a1a1525fb5b91020da86e44810c87a2d7bc
│ ├── info
│ └── pack
└── refs├── heads│ └── master└── tags15 directories, 25 files3.1 object版本对象
实际上,我们提交的是对代码仓库进行的修改,git使用object对象来表示(.git/objects目录下的文件)。每一个object对象都表示代码仓库的一个版本。
我们刚才使用git log进行日志查看时,会发现我们的每一次提交都有一个编号。这是git用于唯一标识某个版本的id(哈希值)。
可以看到,我们在向版本库提交修改之后,objects目录下就会新增一个对应的文件,它的命名就是我们提交的版本的编号:
查看object文件的内容无法直接查看,需要用到如下的指令:
git cat-file -p 版本编号
3.2 其他
- config:当前本地仓库的「专属配置文件」(优先级高于全局配置 ~/.gitconfig)。

- HEAD:存储「当前分支的指针」—— 告诉 Git “你现在正在哪个分支工作”。

可以看到,我们当前正处在默认的主分支" master "下。 - refs 目录:存储「引用(指针)」——Git 用 “指针” 替代直接操作哈希值,让用户通过 “分支名”“标签名” 就能访问对应的提交对象(不用记复杂的 40 位哈希)。

可以看到," master "分支文件中存放的就是我们最后一次提交的版本编号。
4. 版本回退
版本回退是 Git 核心功能之一,核心目的是将代码恢复到历史某个稳定版本。其底层逻辑是:修改分支指针(refs/heads/分支名),让它指向目标历史提交(objects 中的 commit 对象),再根据需求同步工作区 / 暂存区文件。
4.1 找到目标版本
回退前必须先确定「要回退到哪个版本」,通过以下命令查看提交历史:
| 命令 | 作用 |
| git log | 显示完整提交历史(作者、时间、哈希、提交信息) |
| git log --pretty=oneline | 简洁显示( 40 位哈希 + 提交信息) |
| git log --oneline | 简洁显示(前 7 位哈希 + 提交信息) |
| git log -n k | 显示最近 k 次提交(n 后接数字) |
| git reflog | 显示所有操作记录(包括回退、分支切换) |
注:在不发生冲突时,可以使用前7位哈希来代替完整的哈希。
4.2 本地仓库版本回退
git reset [--hard/--mixed/--soft] 版本哈希值| 参数 | 作用效果 | 风险程度 |
| --hard | 移动分支指针,并回退暂存区、工作区到目标版本。 | 高(会丢数据) |
| --mixed(默认) | 移动分支指针,并回退暂存区到目标版本。 | 中 |
| --soft | 移动分支指针。 | 低 |
4.3 撤销工作区未暂存修改
git checkout -- [file]仅针对「已跟踪文件」(即之前通过 git add 提交到过暂存区 / 版本库的文件):
- 如果文件「未暂存」(仅工作区修改,没执行 git add):用「版本库中最新提交的文件版本」覆盖工作区修改,直接恢复到上一次 commit 的状态;
- 如果文件「已暂存」(执行过 git add,但没 commit):用「暂存区的文件版本」覆盖工作区修改(比如暂存后又改了工作区文件,想恢复到 git add 时的状态)。
