Git 学习笔记

版本控制

学习git之前,需要先明白版本控制

版本控制 是一种管理文件(尤其是代码文件)变更的系统,它记录了文件的历史变动,并允许多个开发者或团队协作开发项目。通过版本控制,开发者可以追踪文件的每个修改、比较不同版本的变化、恢复历史版本,以及解决多人并发修改时的冲突。

版本控制分类

  1. 本地版本控制
image-20250219122144495
  1. 集中版本控制 SVN
image-20250219122203659
  1. 分布式版本控制 Git
image-20250219122234932

SVN 与 Git 的主要区别

​ SVN 是集中式版本控制系统,版本库都是集中放在中央服务器的,开发者从中央仓库检出(checkout)文件到本地,并在本地进行修改,修改完成后,开发者需要将更改提交(commit)回中央仓库。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

​ 在 Git 中,每个开发者的机器上都有项目的完整副本,包括版本历史。开发者在本地进行提交(commit),本地仓库记录所有的变动。开发者可以在没有网络连接的情况下工作,当有网络时,将本地的更改推送(push)到远程仓库,或者拉取(pull)远程仓库的更新。

Git 环境配置

查看配置

1
git config -l

查看不同级别的配置文件

1
2
3
4
5
# 查看系统config
git config --system -l

# 查看当前用户(global)配置
git config --global -l

设置用户名与邮箱

  • 设置全局用户名和电子邮件

使用以下命令设置全局的 Git 用户名和电子邮件,这些设置将适用于你计算机上的所有 Git 仓库。

1
2
git config --global user.name "用户名"
git config --global user.email 邮箱

–global:表示该配置是全局配置,适用于你计算机上的所有 Git 仓库。你也可以选择仅在某个仓库中设置用户名和电子邮件(见下面的本地配置)。

  • 设置本地用户名和电子邮件(针对单个仓库)

如果你希望为某个特定的 Git 仓库设置不同的用户名和电子邮件(例如,在工作和个人项目中使用不同的身份),你可以在该仓库中设置本地用户名和电子邮件:

1
2
3
cd /path/to/your/repo
git config user.name "Your Name"
git config user.email "your-email@example.com"

这些设置只会影响当前仓库,不会影响全局设置。

Git 基本理论

工作区域

Git 本地有三个工作区域:工作目录(Workding Directory)、暂存区(Stage/Index)、资源库(Repository)。如果再加上远程的 Git 仓库(Remote Directory)就可以分为四个工作区域,其转换关系如下:

image-20250219134611263
  • 工作区:就是平时存放项目代码的地方
  • 暂存区:用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息
  • 仓库区:就是安全存放数据的位置,这里面有你提交的所有版本的数据。其中 HEAD 文件指向最新放入仓库的版本
  • 远程仓库:托管代码的服务器,例如github、gitee等

工作流程

git 等工作流程一般是这样的:

  1. 在工作目录中添加、修改文件;
  2. 将需要进行版本管理的文件放入暂存区域;
  3. 将暂存区域的文件提交到 git 仓库。

因此,git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(commited)

Git 项目搭建

创建工作目录与常用指令

工作目录一般就是你希望git帮助管理的文件夹,可以是项目的目录,也可以是一个空目录,建议不要有中文。

日常使用只需要记住以下6个命令:

image-20250219140822090

本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

  1. 创建全新的仓库,需要在git管理的项目的根目录执行:
1
2
# 在当前目录新建一个git代码库
git init

​ 执行后可以看到仅在项目目录中多出一个 .git 目录(默认是隐藏的),关于版本等所有信息都在这个目录里面。

  1. 克隆远程仓库到本地
1
2
# 克隆一个项目和它的整个代码历史(版本信息)
git clone [url]

Git 文件操作

查看文件状态

1
2
3
4
5
6
7
8
9
10
11
# 查看指定文件状态
git status [filename]

# 查看所有文件状态
git status

# 添加所有文件到暂存区
git add .

# 提交暂存区中的内容到本地仓库
git commit -m "消息"

忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件、临时文件、设计文件等等。

在主目录下建立 .gitignore 文件,此文件有如下规则:

  1. 文件中的空行或者以 # 号开始的行将会被忽略。
  2. 可以使用 Linux 通配符。例如:* 代表任意多个字符,? 代表一个字符,[abc] 代表可选字符范围,{string1, string2} 代表可选的字符串等。
  3. 如果名称最前面有一个感叹号 ! ,表示例外规则,将不被忽略。

例如:

1
2
3
4
5
6
# 表示注释
*.txt # 忽略所有 .txt 结尾的文件,这样的话上传就不会被选中!
!lib.txt # 但lib.txt 除外
/temp # 忽略根目录下的temp文件,但不忽略其他目录下的temp
build/ # 忽略build/目录下所有文件
doc/*.txt # 会忽略 doc/note.txt 文件,但不包括 doc/server/note.txt 文件

使用 Github

  1. 注册 github,完善个人信息
  2. 设置本机绑定SSH公钥,实现免密码登陆
  3. 将公钥信息添加到 github 账号上
  4. 在 github 上新建仓库,本地 git remote add <name> <url>,其中 是远程仓库的名称,通常使用 origin 作为默认名称, 是远程仓库的地址(可以是 HTTPS 或 SSH 地址)
  5. 本地 git push 即可把本地仓库推送到远程仓库

Git 分支

git 分支中的常用指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但停留在原分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch-name]

# 切换分支
git checkout [branch-name]
git switch [branch-name] # git switch 命令是 Git 2.23 版本引入的,专门用于切换分支,命令语义更加清晰。

# 合并指定分支到当前分支
git merge [branch]

# 删除分支
git branch -d [branch] # -d 就是delete

# 删除远程分支
git push origin --delete [branch]
git branch -dr [remote/branch]

分支的主要意义在于将项目划分成多条线:

​ master 主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况会在新建的 dev 分支上工作。工作完成后/ dev 分支稳定后可以合并到主分支 master 上,保证主线的稳定性。

image-20250220002127202