目录
[Git 的主要功能包括:](#Git 的主要功能包括:)
[1.git init --初始化一个新的本地仓库](#1.git init --初始化一个新的本地仓库)
[2.git config --配置 name 和email](#2.git config --配置 name 和email)
[3.git add : 将工作区修改的内容(增、删、改)添加到 暂存区中](#3.git add : 将工作区修改的内容(增、删、改)添加到 暂存区中)
[4.git commit : 将暂存区内容提交到master](#4.git commit : 将暂存区内容提交到master)
[5.git log : 会按时间倒序(最新在前)列出当前分支的所有提交记录,帮助你了解项目是如何一步步演变的](#5.git log : 会按时间倒序(最新在前)列出当前分支的所有提交记录,帮助你了解项目是如何一步步演变的)
[6.git cat-file : 是 Git 中一个底层(plumbing)命令,用于查看 Git 对象的内容或信息。它主要用于调试、检查仓库内部结构,或理解 Git 如何存储数据。](#6.git cat-file : 是 Git 中一个底层(plumbing)命令,用于查看 Git 对象的内容或信息。它主要用于调试、检查仓库内部结构,或理解 Git 如何存储数据。)
[7.git status : 是 Git 中最常用、最实用的命令之一,用于查看工作区和暂存区的当前状态。它能告诉你:](#7.git status : 是 Git 中最常用、最实用的命令之一,用于查看工作区和暂存区的当前状态。它能告诉你:)
[8.git diff : 是 Git 中用于查看文件差异(differences)的核心命令。它能帮你清晰地看到:](#8.git diff : 是 Git 中用于查看文件差异(differences)的核心命令。它能帮你清晰地看到:)
[9.git reset : 是 Git 中一个强大但需谨慎使用的命令,主要用于移动 HEAD 指针、重置暂存区(index)和/或工作目录到某个指定状态。它常用于撤销提交、取消暂存文件或丢弃更改。](#9.git reset : 是 Git 中一个强大但需谨慎使用的命令,主要用于移动 HEAD 指针、重置暂存区(index)和/或工作目录到某个指定状态。它常用于撤销提交、取消暂存文件或丢弃更改。)
[10、git branch:查看/创建/删除分支](#10、git branch:查看/创建/删除分支)
[12.git clone:是 Git 中用于复制远程仓库到本地的命令。](#12.git clone:是 Git 中用于复制远程仓库到本地的命令。)
[13.git tag :对commit进行打标签](#13.git tag :对commit进行打标签)
[14.git show : 可以查看标签的信息](#14.git show : 可以查看标签的信息)
[撤销修改:主要目的不影响远程仓库,所以撤销的大前提是没有git push](#撤销修改:主要目的不影响远程仓库,所以撤销的大前提是没有git push)
[步骤 1:编辑冲突文件](#步骤 1:编辑冲突文件)
[步骤 2:标记冲突已解决](#步骤 2:标记冲突已解决)
[步骤 3:完成合并](#步骤 3:完成合并)
[1. 保存当前修改(压入 stash)](#1. 保存当前修改(压入 stash))
[2. 查看 stash 列表](#2. 查看 stash 列表)
[3. 恢复 stash(弹出或应用)](#3. 恢复 stash(弹出或应用))
[方式一:恢复并删除 stash(推荐常用)](#方式一:恢复并删除 stash(推荐常用))
[方式二:恢复但保留 stash](#方式二:恢复但保留 stash)
[4. 删除 stash](#4. 删除 stash)
[拉取远程仓库:git clone](#拉取远程仓库:git clone)
[管理远程仓库:git remote](#管理远程仓库:git remote)
[将本地仓库中的修改推送至远程仓库:git push](#将本地仓库中的修改推送至远程仓库:git push)
[将远程仓库内容拉取到本地:git pull](#将远程仓库内容拉取到本地:git pull)
[仓库配置的 .gitignore 文件](#仓库配置的 .gitignore 文件)
什么是Git?
Git 是一个分布式版本控制系统 (Distributed Version Control System, DVCS),用于跟踪和管理代码(或其他文件)的变更历史。它最初由 Linux 内核的创始人 Linus Torvalds 在 2005 年开发,目的是为了更好地管理 Linux 内核的开发协作。
Git 的主要功能包括:
-
版本控制
- 记录文件每一次的修改,可以随时回退到任意历史版本。
- 每次提交(commit)都会生成一个唯一的标识(哈希值),便于追踪。
-
分支管理
- 支持创建多个分支(branch),方便并行开发不同功能或修复不同 bug。
- 分支之间互不影响,合并(merge)操作也相对安全高效。
-
分布式协作
- 每个开发者都拥有完整的代码仓库(包括完整历史),不依赖中央服务器也能工作。
- 可以轻松与他人共享更改、拉取(pull)或推送(push)代码。
-
数据完整性
- Git 使用 SHA-1 哈希算法确保文件内容不会被意外或恶意篡改。
- 所有操作几乎都是本地进行,速度快且可靠。
Git工作区、暂存区、版本库:
- **工作区:**就是你在电脑里能看到的目录。
- **暂存区:**英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- **版本库:**工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

如何将一个文件用git管理起来:
1、git add 将工作区修改的内容(增、删、改)添加到 暂存区中
2、git commit 将暂存区内容提交到master
objects:对象库 里面存储了一堆的 git 对象
add的同时在objects生成git对象,修改的工作区内容会写入对象库的一个新的对git象中,而这里面的一个个不同的对象就相当于不同的版本,自然而然就达到了版本管理的效果
暂存区和master:存的是git对象的索引
Head则指向不同的master分支,访问不同的git对象
常用命令:
1.git init --初始化一个新的本地仓库

执行命令后会生成一个 .git 版本库,注意不要对其进行修改
2.git config --配置 name 和email
初始化之后对name和email进行配置,否则后续可能会出现一些报错

通过 git config -l 可对配置信息进行查看

也可通过 git config --unset user.name/... 对配置信息进行删除
一台机器可能有多个git仓库,此时可以使用 --global 选项对所有仓库进行一键配置
bash
#例如
git config --global user.name "tyx"
3.git add : 将工作区修改的内容(增、删、改)添加到 暂存区中
bash
git add filename
4.git commit : 将暂存区内容提交到master
5.git log : 会按时间倒序(最新在前)列出当前分支的所有提交记录,帮助你了解项目是如何一步步演变的
git reflog : 本地记录
6.git cat-file : 是 Git 中一个底层(plumbing)命令 ,用于查看 Git 对象的内容或信息。它主要用于调试、检查仓库内部结构,或理解 Git 如何存储数据。
bash
git cat-file <选项> <对象>

7.git status : 是 Git 中最常用、最实用的命令之一,用于查看工作区和暂存区的当前状态。它能告诉你:
- 哪些文件被修改了但还没暂存(unstaged)
- 哪些文件已暂存(staged),准备下次提交
- 哪些文件是新增的、未被跟踪的(untracked)
- 当前位于哪个分支
- 是否有未完成的合并或变基操作

8.git diff : 是 Git 中用于查看文件差异(differences)的核心命令。它能帮你清晰地看到:
- 工作区 vs 暂存区(默认)
- 暂存区 vs 最近一次提交
- 任意两次提交之间的变化
- 不同分支之间的代码差异

bash
git diff [file] //命令用来显示暂存区和工作区文件的差异
git diff HEAD -- [file] //查看版本库和工作区文件的区别
9.git reset : 是 Git 中一个强大但需谨慎使用 的命令,主要用于移动 HEAD 指针、重置暂存区(index)和/或工作目录到某个指定状态。它常用于撤销提交、取消暂存文件或丢弃更改。

10、git branch:查看/创建/删除分支
bash
# 查看本地所有分支
git branch
# 查看所有分支(包括远程)
git branch -a
bash
# 创建一个新分支(但不切换)
git branch <branch-name>
# 创建并切换到新分支
git checkout -b <branch-name>
# 或者使用较新的命令(Git 2.23+)
git switch -c <branch-name>
bash
# 删除已合并的分支
git branch -d <branch-name>
# 强制删除未合并的分支
git branch -D <branch-name>
git branch -vv : 查看本地和远程分支建立连接的情况
11.合并分支
bash
# 假设你在 main 分支上,想合并 feature 分支
git checkout main
git merge feature
12.git clone:是 Git 中用于复制远程仓库到本地的命令。
不能在本地仓库所在目录下执行

13.git tag :对commit进行打标签
14.git show : 可以查看标签的信息
15、git checkout -b [dev] [origin/dev]:建立远程分支和本地分支的连接
撤销修改:主要目的不影响远程仓库,所以撤销的大前提是没有git push
情况一:不要这些修改了,请把文件变回上次提交的样子,只撤销工作区
解决办法:1、手动修改 2、git checkout -- [file]
情况二:工作区和暂存区都要撤销
解决办法:git reset
情况三:工作区、暂存区、版本库都要撤销
解决办法:git reset
删除文件:
1、rm file -> git add -> git commit
2、git rm file -> git commit
分支管理:
在 Git 中,分支 (Branch) 是一个轻量级、可移动的指针,指向某次提交(commit)。它让你可以在不影响主线开发的情况下,独立地进行功能开发、 bug 修复、实验等操作。
HEAD可以指向任一分支,被指向的分支就是当前的工作分支,这时的add、commit都是对这一条被指向的分支进行操作的
查看分支:
bash
# 查看本地所有分支
git branch
# 查看所有分支(包括远程)
git branch -a
创建分支:
bash
# 创建一个新分支(但不切换)
git branch <branch-name>
# 创建并切换到新分支
git checkout -b <branch-name>
# 或者使用较新的命令(Git 2.23+)
git switch -c <branch-name>
切换分支:
bash
git checkout <branch-name>
# 或
git switch <branch-name>
合并分支:
bash
# 假设你在 main 分支上,想合并 feature 分支
git checkout main
git merge feature
删除分支:需要在其他分支上删除分支
bash
# 删除已合并的分支
git branch -d <branch-name>
# 强制删除未合并的分支
git branch -D <branch-name>
合并冲突问题:
在 Git 中,合并冲突(Merge Conflict) 是指在执行 git merge、git rebase 或 git pull 时,Git 无法自动决定如何整合两个分支对同一文件同一区域的不同修改。这时就需要你手动解决冲突。
一、为什么会发生合并冲突?
当两个分支对同一个文件的同一行(或相邻行) 做了不同的修改,Git 无法判断哪个版本是"正确"的,就会标记为冲突。
例如:
- 你在
feature分支修改了app.js的第 10 行为console.log("A"); - 同时别人在
main分支把第 10 行改成了console.log("B"); - 当你尝试把
feature合并到main时,Git 就会报冲突。
二、冲突的表现形式
当你执行 git merge 或 git pull 后,如果出现冲突,Git 会提示:
此时,用 git status 可以看到冲突的文件处于 "unmerged" 状态。
打开冲突文件,你会看到类似这样的标记:
<<<<<<< HEAD到=======:当前分支的内容=======到>>>>>>> feature:要合并分支的内容
三、如何解决冲突?
步骤 1:编辑冲突文件
手动决定保留哪一部分,或者融合两者。例如:

删除所有冲突标记 (<<<<<<<, =======, >>>>>>>)。
步骤 2:标记冲突已解决

步骤 3:完成合并

注意:如果是 rebase 冲突,解决后使用 git rebase --continue。
**临时保存当前工作目录和暂存区的修改,**而不进行提交:
这在你需要切换分支、拉取更新或处理紧急任务但又不想提交不完整代码时特别有用
一、基本用法
1. 保存当前修改(压入 stash)

- 会将 已跟踪文件 的修改(包括工作区和暂存区)保存到一个"stash 堆栈"中。
- 执行后,工作目录会恢复到
HEAD状态(干净状态)。 - 默认消息为:
WIP on <branch>: <commit-message>
⚠️ 注意:未跟踪的文件(untracked files)默认不会被 stash ,除非加
-u参数。
2. 查看 stash 列表


3. 恢复 stash(弹出或应用)
方式一:恢复并删除 stash(推荐常用)

- 默认恢复最新的 stash(
stash@{0}) - 恢复成功后自动从 stash 列表中删除
方式二:恢复但保留 stash

- 适用于你想多次尝试恢复,或保留备份
4. 删除 stash

远程操作:
拉取远程仓库:git clone

管理远程仓库:git remote
它主要用于查看、添加、重命名或删除与本地仓库关联的远程仓库。


将本地仓库中的修改推送至远程仓库:git push
操作的句柄是 分支
在推送前要确保本地的user.name 和 user.email 与远程仓库的一样


将远程仓库内容拉取到本地:git pull
是 Git 中用于从远程仓库获取最新更改并合并到当前本地分支的命令。它实际上是两个操作的组合:


仓库配置的 .gitignore 文件
可以在 git add . 时对一些不想提交的文件进行忽略
git check-ignore -v d.so 可以查看一个文件被忽略的原因
标签管理:
如果你达到一个重要的阶段,并希望永远记住提交的快照,你可以使用 git tag 给它打上标签。
标签可以简单的理解为对某次提交commit的一个标识,相当于起了一个别名
创建标签:
bash
git tag <tagname>
默认是对最新的一次commit进行打标签,如果想指定,可以加上指定的commit id
bash
git tag -a v1.0 // -a 选项可以添加注解:
git tag -a v1.0 -m "Release version 1.0"
查看标签:
bash
git tag //列出所有标签
git show <tagname> //查看某个标签详细信息
删除标签:
bash
git tag -d <tagname>
git tag -d v1.0
推送标签到远程仓库:
bash
git push origin <tagname>
推送所有标签:
git push origin --tags
删除远程仓库标签:
bash
git push origin --delete <tagname>