一.初始化
1.git init初始化仓库
git init 用于在当前目录下初始化一个本地 Git 仓库,让这个目录开始被 Git 跟踪和管理。
生成
.git
元数据目录,从而可以开始进行提交、回退、分支管理等操作。
2.git config user.name/user.email配置本地仓库
# 设置用户名
git config user.name "你的名字"
# 设置邮箱(与 GitHub 等平台账户一致)
git config user.email "你的邮箱@example.com"
# 查看当前配置
git config -l
#删除配置
git config --unset user.name
git config --unset user.email
上面配置的是局部的本地仓库 加上--global可以设置为全局的。
# 设置全局用户名 git config --globa user.name "你的名字" # 设置全局邮箱(与 GitHub 等平台账户一致) git config --globa user.email "你的邮箱@example.com" # 查看当前配置 git config -l #删除配置 git config --globa --unset user.name git config --globa --unset user.email
什么是局部?什么是全局?为什么?
Git 是为多个项目、多用户设计的系统,所以需要支持“不同作用范围的配置”:
作用域 说明 示例 --system
整个操作系统层面(对所有用户生效) 不常用,配置在 /etc/gitconfig
--global
当前登录用户的所有项目 常用,配置在 ~/.gitconfig
(默认) 当前 Git 项目的配置(最精确) 配置在 .git/config
文件中
你想干什么 推荐方式 所有项目都用同一个名字和邮箱 用 --global
设置一次即可某个项目用不同的名字和邮箱 在项目目录下直接 git config
二.添加
1.git add把修改加入暂存区
2.git commit提交到版本库
git add把代码放入暂存区 git commit把暂存区代码存入版本库
区域 位置名 功能说明 工作区 工作目录(Working Directory) 你正在编辑的真实文件所在位置 暂存区 stage
或index
保存你“准备提交”的文件快照 版本库 .git/objects
、.git/HEAD
保存所有历史版本(已提交内容) ![]()
gti log查看历史提交记录
三.查看
1.git status查看当前仓库的状态
git status 是 Git 中最常用的命令之一,用于查看当前仓库的状态,特别是在你开发过程中了解哪些文件发生了变化、是否已被 add、是否有未提交的内容等。
状态类别 含义说明 Untracked files 工作区中有新建但未被 Git 跟踪的文件(没被 add
)Changes not staged for commit 已被修改但未 add
进暂存区Changes to be committed 已 add
,等待commit
nothing to commit 所有文件都已提交,仓库干净
git status -s 简洁模式(short),常用于配合脚本或快速查看
其它状态缩写
状态符号 文件路径 含义 A
TCP/client.cc
✔️ 新文件,已 add
进暂存区,等待提交M
UDP/client.cc
✏️ 文件被修改,但尚未 add
,还在工作区??
TCP/server.cc
🆕 新文件,未被 Git 跟踪,没被 add
符号 含义说明 ??
Untracked(未跟踪文件) A
Added(已添加到暂存区的新文件) M
Modified(已修改) D
Deleted(删除) R
Renamed(重命名) C
Copied(复制) AM
新文件添加后又被修改 MM
已 add
的文件再次修改,暂存区和工作区都修改了UD
unmerged conflict:你删除了文件,但它在合并中被修改 UU
合并冲突(两边都修改)
2.git diff 查看代码变更内容
git diff 是 Git 中用于查看代码变更内容的命令,帮你对比不同版本、文件或状态的具体修改细节(逐行对比)。
git diff 工作区 和 暂存区 差异(没add的内容)
表示:工作区 和 暂存区 的差异(即你修改了但还没
add
到暂存区的内容)
后面还也加指定文件夹/文件 没有差异不会输出
git diff --cached 暂存区 和 最新提交 的差异(没push的内容)
表示:已经
git add
过的内容,和当前最新一次提交之间的差异(也就是你准备push提交的内容)当然后面也可以指明文件/文件夹
git status git diff配合使用 找到变化文件+查看具体变化
命令 用途 git status
看“哪些文件”发生了变化 git diff
看“具体改动内容是啥”
# 1. 先查看有哪些变更的文件
git status
# 2. 查看未 add 的文件改了什么
git diff
# 3. 如果 add 了,再看 add 的内容(准备 commit 的)
git diff --cached
# 4. 最后确认无误,提交
git commit -m "说明"
git status -s 发现TCP/client.cc文件add到了暂存区 还进行了修改,想看看具体改了什么就用
git diff TCP/client.cc找具体的改动
四.git reset版本回退
git reset 回退版本(会更改提交历史) 用于本地撤回提交、修改。
git reset 有三个选项
--soft
回退版本库
--mixed (默认)
回退版本库+暂存区
--hard
回退版本库+暂存区+工作区
慎用 --hard 版本库 暂存区 工作区的内容全会修改 不可恢复
想做什么事情 用哪个选项 解释 ✅ 只想回退提交记录,但保留已经写好的代码和 add
状态(准备重新commti提交)git reset --soft
改了 commit,但代码和暂存区内容保留 ✅ 回退提交记录,并把代码从暂存区拿出来,保留在工作区(想重新 add
)git reset --mixed
(默认)改了 commit,撤销了 git add
,但代码还在⚠️ 提交错了、代码也不想要了,想恢复成某个版本的干净状态 git reset --hard
彻底抹除提交 + 暂存区 + 工作区,慎用!
怎么选?
你想做什么 使用命令 解释说明 💡 只想换个提交说明,不改代码 git reset --soft HEAD^
回退提交,保留暂存区( add
)和代码,重新写commit
信息✏️ 不想提交当前内容,改完代码再提交 git reset HEAD^
(默认是--mixed
)回退提交 + 撤销 add
,代码保留在工作区,可修改再add
❌ 完全不想要这次提交,也不想要这次改的代码了 git reset --hard HEAD^
回退提交 + 暂存区 + 工作区全部还原,代码会丢失(⚠️危险)
git log --oneline+git reset 进行版本回退
git log --oneline (简略版)先获取提交记录 里面的提交ID(黄色部分)
git reset +要回退到的版本的提交ID (默认选项--mixed 版本库+暂存库都会回退)
后悔了怎么办?
只要有对应的版本ID 就可以返回
如果没有保存版本ID怎么办?
git relog 查看每个版本库的ID
git reflog 用来查看你所有 HEAD 指针的变动历史记录,里面会有每个版本的ID
五.撤销修改
撤销修改 我们分为三种情况 1.只在工作区 2.add到了暂存区 3.commit到了版本库
状态描述 推荐命令 简明说明 改错代码,未 add git checkout -- <文件>
恢复工作区代码为上次提交版本,最安全 改错代码,已 add
git reset <文件> && git checkout -- <文件>
先撤销暂存,再还原代码 已commit,但未 push
git reset --hard HEAD^(多个文件)或者
git reset <文件> && git checkout -- <文件> (单个文件)
回退最近一次提交,代码和提交记录都丢弃,危险操作
git checkout -- <file> 撤销该文件改动 恢复为上次 commit 的版本
git checkout -- <文件>
把工作区file文件的代码进行撤销修改。
git reset <文件> && git checkout -- <文件>
git reset <文件> 只针对file文件 版本库 暂存区进行撤销
想撤销全部文件的话 git reset HEAD
HEAD指向当前版本 HEAD^指向上个版本 HEAD^^上两个版本 ...
带上 --hard就是连带工作区的代码也进行修改 但不能但只对一个文件进行操作,会把所有文件进行修改。
git reset --hard HEAD^
git reset --hard HEAD^ 版本库 赞成区 工作区都回退到上个版本
因为已经commit提交到版本库了,log已经记录当前版本ID HEAD指向当前版本,撤销就是要回到上一个版本 所以是HEAD^。
六.git rm删除文件
将文件 从 Git 的版本库和暂存区中删除,并默认在工作区(磁盘)也删除该文件。
1.git rm <file> 删除指定文件
此时文件从 暂存区 和 工作区 都会被删除;
2.git commit -m "删除文件"
写入版本库 文件在版本库中也被删除
不想删除工作区的文件,怎么办?
git rm --cached <file> 工作区中文件不删除
1.git rm --cached <file>
仅在暂存区中删除 工作区中不删除
2.git commit -m "删除文件"
删除版本库中的
删除目录加 -r 选项