一、git是什么
Git 是目前最流行的分布式版本控制系统 ,用来记录文件的变化、协调多人协作,最初是为了管理 Linux 内核开发而创建的。
可以把它理解成一个强大的"存档+时光机"系统:
-
存档:项目每次有意义的变化,比如完成一个新功能,都可以存为一个"快照"。
-
时光机:任何时候都可以回退到过去某个版本,或查看某个文件的修改历史。
-
多人协作:在不干扰别人的情况下并行开发,最后再优雅地合并成果。
为了理解它,需要知道这几个核心概念:
-
仓库 :一个项目文件夹,所有的历史记录都保存在其中的一个隐藏文件夹
.git里。 -
工作区、暂存区、仓库 :Git 的工作分为三块区域。你在工作区 改文件,把想保存的改动加入暂存区 ,最后确认提交,保存到仓库成为永久历史。这让你能精细控制每次提交的内容。
-
提交:一次提交就是项目的一个快照。Git 鼓励"小步快跑",每次完成一个小功能就提交一次。
-
分支:这是 Git 的精髓。你可以在自己的分支上大胆试验,完全不影响主分支。完成后,再通过"合并"把成果合入。分支的创建和切换速度极快。
Git是一个免费并且开源的分布式版本控制系统,能够高效的处理从小型到大型项目的版本管理,以及提供有效的团队管理工具。
二、git的工作原理



-
工作区:你电脑里能看到的项目文件夹,改代码在这里。
-
暂存区:一个"购物车",选择哪些修改要放到下一次提交里。
-
本地仓库 :存放所有历史版本的地方,就在项目根目录隐藏的
.git文件夹里。 -
远程仓库:GitHub/GitLab 上的版本,用来协作和备份。
文件在 Git 眼里只有两种状态:
-
未跟踪:新文件,Git 还不认识。
-
已跟踪:Git 已经在管的文件,又分为未修改、已修改、已暂存三种。
三、git的分支示意图

主要流程:新建一个项目后自动新建了mian/master分支,这个时候我们新建一个develop分支用来作为主开发的分支,然后不同小组新建各自的feature分支来开发各自的功能,开发完后向develop主开发分支提交合并请求,develop分支对其进行验证,找不到bug后新建一个release分支作为测试服,在进行长时间验证,发现错误就打回develop进行修复,发现很稳定后就向主项目main/master合并,并生成版本号。
- main/master 分支是项目的核心分支,只接受hotfixes(热修复,紧急修复 )和release(预发布版本)的分支合并 ,通常具有版本号,可以称为正式版
- release 分支是develop分支拿来验证的分支,就是所谓的测试版
- develop 分支是开发分支,也是长期存在的核心分支,主要功能是收集各种feature分支,对他们进行测试和验证
- feature 分支是各种新功能的开发分支,可以同时开很多条分支,同时开发减少时间成本
- 版本号的说明:
1.主版本:主要功能变化或者重大更新
2.次版本:添加一些新功能,改进旧功能
3.小版本:修复一些bug,打一些补丁
四、配置你的身份
在使用 Git 之前,必须先告诉它"你是谁"。这套配置在这台电脑上做一次就行
设置名字
bash
git config --global user.name "你的名字"
设置邮箱
bash
git config --global user.email "你的邮箱@example.com"
检查是否设置成功
bash
git config --global --list
--global 表示对这台电脑上所有仓库都生效。如果只想在当前项目单独设置,把 --global 去掉就行。
输出:

五、本地使用git
先创建一个项目文件夹叫my-project
1、初始化仓库
告诉 Git 开始管理这个文件夹
bash
cd my-project
git init
这会创建一个.git隐藏文件夹,你的所有版本历史都在里面。
输出

2、查看状态
bash
git status
它会告诉你:有什么新文件、改了哪些东西、下一步可以做什么
输出:

3、开始第一次提交
第一步:添加到暂存区
bash
# 添加指定文件
git add index.html
# 或一次添加所有修改过和新建的文件(常用)
git add .
输出:

第二步:提交到本地仓库
bash
git commit -m "初始化项目,完成首页骨架"
第三步:查看提交历史
bash
git log
输出:

到此为止,你已经完成了从零到第一次提交的全部过程。回过头看,其实就是六个命令:git init → git add →git commit ,中间夹着git status 和 git log 看状态。
六、推送到GitHub
准备工作:在 GitHub 上创建一个空仓库
-
打开 https://github.com,登录你的账号。
-
点击右上角的 "+" → "New repository"。
-
Repository name 填
my-first-project。 -
什么都不要勾选,特别是"Initialize this repository with a README"一定不要打勾。
-
点击绿色的 "Create repository" 按钮。
-
你会看到一个页面,上面有三条横杠。复制第一个框里那两条命令,大致长这样:
bash
git remote add origin https://github.com/你的用户名/my-first-project.git
git branch -M main
把它原样复制到你的终端里,回车执行。

接着执行推送命令:
bash
git push -u origin main
以后再修改代码,想同步到 GitHub,走这个极简流程就行:
bash
git add .
git commit -m "改了点什么"
git push
七、多人协作的核心循环

1、假设现在你的代码已经被修改了,也就是别人在GitHub上先推了代码
2、现在你本地是旧版本,如果想继续工作,第一件事就是先拉取:
bash
git pull origin main
你会看到类似 Fast-forward 这样的提示,说明拉取成功,此时再打开电脑查看代码就可以看见被修改了
这个动作是每天开工前的第一件事,能避免后面大量的冲突。
3、假设你在本地改了代码,别人在网页上改了同时提交时选了"Commit directly to the main branch",这时候如果直接推git push origin main会出错误
不能推,因为别人在你之后更新了,先去看看他改了啥
4、解决冲突
根据提示,先拉取
bash
git pull origin main
拉取的时候,Git 会自动尝试合并。如果运气好,改的是不同行 ,就自动合并成功 。
如果改了同一行 ,所以它会直接报冲突
4.1、先打开本地文件
文件里面:

4.2、手动修改,决定最终留什么
4.3、告知 Git,冲突已解决
保存文件后,像平时一样提交:
bash
git add xxx.xxx
git commit -m "解决了和同事的文案冲突"
4.4、最后再次推送
bash
git push origin main
八、分支管理
分支让你在不影响主线的前提下,去尝试新功能。
场景:你想在网页里加一个标题,但不确定好不好。
1. 创建一个新分支,并切换过去
bash
git switch -c add-title

2. 在这个分支上修改文件
3. 提交这次修改
bash
git add index.html
git commit -m "添加了标题标签"
4. 切回主分支,看看效果
bash
git switch main

5. 合并分支(功能做完了,决定合入主线)
bash
git merge add-title
这个命令会把 add-title 分支的成果,合并 到你当前所在的main 分支。再打开 index.html,标题又出现了。
6. 清理不需要的分支
bash
git branch -d add-title
任务完成,分支可以删掉了。
九、后悔药
| 场景 | 命令 |
|---|---|
| 改乱了工作区,想回到上次提交的状态 | git restore 文件名 |
| 把文件加到了暂存区,想撤回 | git restore --staged 文件名 |
| 提交信息写错了,想改 | git commit --amend |
| 刚提交完,想把漏掉的文件补进去 | git add 漏掉的文件 + git commit --amend --no-edit |
| 想看看某个文件的历史 | git log -p 文件名 |
| 想回到过去看看某个版本 | git switch 提交号 |
| 想彻底取消最近一次提交,回到之前 | git reset --hard HEAD~1 |
| 工作做一半要切分支,但又不想提交 | git stash / git stash pop |
