Git 详细使用教程

一、Git 介绍与安装

1、Git 介绍

Git 是一款版本控制软件,核心作用是管理文件的不同版本。
类比场景:用 Word 写论文时,会保存“初级版”“中期版”“最终版”等多个版本,Git 就是对项目代码做类似的版本管理与控制。

2、Git 的安装

网上有大量简单易懂的安装教程,本文不做赘述。

3、Git 使用前的说明

  • 推荐使用 Git 自带的 Git Bash 命令行工具,而非 Windows 自带的 CMD;Git Bash 命令与 Linux 命令一致,操作更便捷(CMD 也可使用,只是体验较差)。
  • Git Bash 支持 ls、cp、mkdir、vim 等命令,且文件会有颜色区分,可读性更高。

二、Git 的基础使用

本文所有操作均以项目目录 E:\00\MyProject 为例。

1、走进 Git 之前

在需要管理的项目文件夹上右键,选择Git Bash Here,打开 Git Bash 并进入该目录;未初始化的目录无法被 Git 管理,执行 Git 命令会报错。

2、Git 基础使用

(1)git init:项目初始化为仓库

这是使用 Git 管理项目的第一步,用于将普通文件夹初始化为 Git 版本仓库。
命令

git init

初始化结果说明

  • 项目目录下会生成隐藏的 .git 文件夹,所有版本信息都会存储在该文件夹中。

.git 文件夹作用

  • 存储项目所有版本的历史信息;
  • 比手动拷贝省空间:第一次提交会将所有文件存入,后续仅保存修改的内容。
(2)git add:管理文件

在使用 git add 前,先通过 git status 查看文件状态,这是 Git 最常用的辅助命令。

git status:查看文件状态

命令

git status

文件三种状态

  • 红色:文件被创建、修改、删除,未被 Git 跟踪;
  • 绿色:执行 git add 后,文件被加入暂存区,已被 Git 跟踪;
  • 白色:执行 git commit 后,文件被提交到本地仓库,完成版本记录。
git add:添加文件到暂存区

作用:将未跟踪的红色文件加入暂存区,变为绿色,让 Git 开始管理该文件。
基础命令

git add <file>  # 单个文件
git add file1 file2  # 多个文件
git add .  # 所有文件(含子文件夹,推荐使用)

注意:文件修改后会重新变为红色,需再次执行 git add 才能重新跟踪。

(3)git commit:把文件提交到本地仓库

作用:将暂存区的绿色文件提交到本地仓库,生成版本记录,文件变为白色。
命令

git commit -m <message>
  • -m:必须携带,后面跟提交说明(建议写有意义的内容,方便后续查看历史记录);
  • <message>:提交说明,使用双引号包裹。

执行示例

git commit -m "第一次提交到仓库"

提交成功反馈:终端会显示提交的分支、版本号、修改的文件数和内容变化。

注意事项

  1. 若提交时提示配置用户信息,需执行以下命令配置(全局配置,一次配置永久生效):
    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
  2. 提交说明建议用双引号,避免单引号导致的报错。
(4)git log:查看提交历史记录

作用:查看本地仓库的所有提交记录,包含版本号、提交人、邮箱、提交时间、提交说明。
命令

git log

核心价值:获取每次提交的版本号,用于后续版本回滚。

(5)基础操作流程总结
# 1. 进入项目目录
cd E:\00\MyProject
# 2. 初始化仓库
git init
# 3. 查看文件状态
git status
# 4. 添加所有文件到暂存区
git add .
# 5. 提交到本地仓库
git commit -m "提交说明"
# 6. 查看提交记录
git log

三、Git 的高级使用

1、版本回滚相关

(1)git reset --hard 版本号:版本回滚

作用:将项目回滚到指定版本号对应的状态,覆盖当前工作区的所有修改。
命令

git reset --hard 版本号
  • 版本号可通过 git log 获取,无需写全,前几位唯一即可。

示例:回滚到第一次提交的版本

git reset --hard 1249aeab1df156cda5d2245b073c9554f6a0a03b
(2)git reflog:查看所有操作记录

问题:执行版本回滚后,git log 无法看到回滚后的版本记录,无法直接“滚回去”。
解决:使用 git reflog 查看所有操作记录(包括提交、回滚),可获取所有历史版本的版本号。
命令

git reflog

使用场景:回滚后想恢复到最新版本,通过 git reflog 获取最新版本号,再执行 git reset --hard 版本号 即可。

(3)版本回滚流程总结
# 1. 查看提交记录,获取目标版本号
git log
# 2. 回滚到指定版本
git reset --hard 版本号
# 3. 若需恢复,查看所有操作记录获取最新版本号
git reflog
# 4. 恢复到最新版本
git reset --hard 最新版本号

2、暂存代码相关(git stash

(1)使用场景

开发中遇到紧急 Bug 修复,但当前功能开发到一半,代码未完成无法提交,此时可将未提交的代码暂存,修复完 Bug 后再恢复暂存的代码继续开发。

(2)核心命令
git stash:暂存未提交的代码

作用:将工作区中未 git add/git commit 的修改暂存到“临时区域”,工作区恢复到当前版本的干净状态。
命令

git stash
git stash pop:恢复暂存的代码

作用:将临时区域中最新的暂存记录恢复到工作区,同时删除该暂存记录。
命令

git stash pop

注意:若恢复的代码与 Bug 修复后的代码修改了同一个文件,会出现合并冲突,需手动修改冲突内容。

(3)git stash 其他常用命令
git stash list  # 查看所有暂存记录
git stash clear  # 清空所有暂存记录
git stash apply <编号>  # 恢复指定编号的暂存记录(不删除暂存)
git stash drop <编号>  # 删除指定编号的暂存记录
(4)注意

企业开发中,修复紧急 Bug 一般不使用 git stash,而是通过分支处理,git stash 仅适用于个人开发场景。

3、分支相关操作(核心)

分支是 Git 最核心的功能之一,可实现多任务并行开发,不同分支相互独立,修改互不影响。
默认主分支为 master,企业开发中一般会创建 dev 开发分支、bug 修复分支、review 代码审核分支等。

(1)git branch:创建/查看分支

创建分支命令

git branch <分支名>

查看分支命令

git branch  # 查看本地所有分支(* 标记当前分支)
git branch -a  # 查看本地+远程所有分支
(2)git checkout:切换分支

命令

git checkout <分支名>

注意:切换分支前,需将当前分支的修改提交完成,否则会报错(避免分支间代码污染)。

快捷操作:创建并切换分支(部分 Git 版本支持)

git checkout -b <分支名>
(3)git merge:合并分支

作用:将指定分支的代码合并到当前分支
命令

git merge <分支名>

示例:将 dev 分支合并到 master 主分支

# 1. 先切换到 master 分支
git checkout master
# 2. 合并 dev 分支
git merge dev

注意:若两个分支修改了同一个文件,合并时会出现冲突,需手动修改冲突后再提交。

(4)企业级 Bug 修复分支操作流程
# 1. 确保 dev 分支开发代码已提交
git add .
git commit -m "dev 分支功能开发中,暂存"
# 2. 切换到 master 主分支
git checkout master
# 3. 创建 bug 修复分支并切换(也可分步执行)
git branch bug
git checkout bug
# 4. 在 bug 分支修复 Bug,完成后提交
git add .
git commit -m "修复XX Bug"
# 5. 切换回 master 分支,合并 bug 分支
git checkout master
git merge bug
# 6. 删除 bug 修复分支(已无使用价值)
git branch -d bug
# 7. 切换回 dev 分支,继续开发功能
git checkout dev
(5)git rebase:另一种合并方式

git merge 的区别

  • git merge:合并后会保留分支的提交记录,形成“分叉”的提交历史,可清晰看到分支合并轨迹;
  • git rebase:将分支的提交记录“拉直”,合并到主分支的提交历史中,提交记录更整洁,无分叉。

冲突处理git rebase 合并也会出现冲突,手动解决后执行以下命令继续:

git rebase --skip

使用建议:需要保留合并记录用 git merge,追求提交历史整洁用 git rebase

四、Git 远程仓库使用

远程仓库相当于线上代码托管平台,解决本地代码跨设备、多人协同开发的问题。

1、常用远程仓库平台

  • 国外:GitHub(支持私有仓库);
  • 国内:Gitee(码云,提供免费私有仓库,访问速度快);
  • 自建:GitLab(需服务器,适合企业内部私有化部署)。

本文以Gitee(码云) 为例讲解远程仓库操作。

2、Gitee 基础操作:创建远程仓库

  1. 注册并登录 Gitee 账号;
  2. 点击新建仓库,填写仓库名称、描述,选择仓库类型(私有/公开),点击创建
  3. 创建完成后,获取仓库的 HTTPS 地址(如 https://gitee.com/shliang/test_git.git),用于本地仓库关联。

3、本地仓库关联远程仓库并推送代码

(1)git remote add:关联远程仓库

作用:将本地仓库与远程仓库建立关联,给远程仓库地址起别名(默认别名 origin,可自定义)。
命令

git remote add origin <远程仓库HTTPS地址>

示例

git remote add origin https://gitee.com/shliang/test_git.git
(2)git push:推送本地代码到远程仓库

作用:将本地指定分支的代码推送到远程仓库的对应分支。
基础命令

git push origin <本地分支名>

示例

# 推送 master 分支到远程
git push origin master
# 推送 dev 分支到远程
git push origin dev

注意:第一次推送时,Gitee 会弹出验证框,输入 Gitee 账号和密码即可。

4、从远程仓库拉取/克隆代码

(1)git clone:克隆远程仓库到本地

作用:将远程仓库的所有代码完整克隆到本地,自动创建项目文件夹并初始化 Git 仓库,自动关联远程仓库(别名 origin)。
命令

git clone <远程仓库HTTPS地址>

示例

git clone https://gitee.com/shliang/test_git.git

适用场景:首次获取远程仓库代码(如在家用新电脑开发)。

(2)git pull:拉取远程最新代码到本地

作用:将远程仓库指定分支的最新代码拉取到本地当前分支,同步代码(适用于本地已有仓库,需更新远程最新内容)。
命令

git pull origin <远程分支名>

示例:拉取远程 dev 分支的最新代码

git pull origin dev

5、跨设备开发操作流程(公司→家里)

(1)公司电脑:推送代码到远程
# 1. 进入项目目录,确保代码已提交
git add .
git commit -m "公司开发:完成XX功能"
# 2. 关联远程仓库(首次操作,已关联可跳过)
git remote add origin https://gitee.com/shliang/test_git.git
# 3. 推送 master/dev 分支到远程
git push origin master
git push origin dev
(2)家里电脑:拉取代码并继续开发
# 1. 克隆远程仓库到本地(首次操作)
git clone https://gitee.com/shliang/test_git.git
# 2. 进入项目目录
cd test_git
# 3. 查看本地分支(默认只有 master)
git branch
# 4. 创建 dev 分支并切换
git branch dev
git checkout dev
# 5. 拉取远程 dev 分支最新代码
git pull origin dev
# 6. 在家开发,完成后提交并推送
git add .
git commit -m "家里开发:完善XX功能"
git push origin dev
(3)回到公司电脑:同步家里开发的代码
# 1. 进入项目目录,切换到 dev 分支
git checkout dev
# 2. 拉取远程 dev 分支最新代码(家里推送的内容)
git pull origin dev
# 3. 继续在公司开发

五、Git 开发规范(企业级)

1、多人协同开发的分支规范

企业开发中不会直接在 master 主分支开发,一般会创建多层分支,分工明确:

  • master:主分支,存储线上正式运行的代码,禁止直接修改,仅通过合并其他分支更新;
  • dev:开发分支,存储团队开发的最新代码,所有开发分支最终合并到该分支;
  • review:代码审核分支,由组长负责,开发人员将自己的分支合并到该分支,组长进行代码审核;
  • 开发人员个人分支:每个开发人员创建自己的分支(如 dev_zhangsan),在自己分支开发功能,完成后合并到 review 分支。

协同开发流程

  1. 开发人员在个人分支开发功能,完成后提交;
  2. 将个人分支合并到 review 分支,组长审核代码;
  3. 审核通过后,将 review 分支合并到 dev 开发分支;
  4. 项目上线时,将 dev 分支合并到 master 主分支。

2、代码审核(Code Review)

  • 审核人:一般由项目组长/技术负责人负责;
  • 审核频率:建议每 2 天左右审核一次,及时发现代码问题;
  • 冲突解决:若合并个人分支到 review 分支时出现冲突,先拉取远程 review 分支的最新代码,本地解决冲突后再合并推送。

3、给开源项目贡献代码(Fork + Pull Request)

若想给如 Django、Vue 等开源项目贡献代码,因无法成为核心开发者,需通过 Fork + Pull Request 方式:

  1. Fork:在开源项目的 GitHub/Gitee 页面点击 Fork,将项目复制到自己的远程仓库;
  2. 克隆:将自己仓库中的复刻项目克隆到本地,修改代码并提交;
  3. Pull Request:在自己的仓库页面点击 Pull Request,向原开源项目发起代码合并请求;
  4. 合并:原项目作者审核代码后,若认为代码有价值,会接受请求,将你的代码合并到原项目,你的贡献会被记录。

4、.gitignore 文件:忽略无需版本控制的文件

(1)作用

Git 会忽略 .gitignore 文件中指定的文件/文件夹,不会对其进行跟踪,避免无用文件(如日志、缓存、编译文件)被提交到仓库。

(2)创建与使用
  1. 在项目根目录创建 .gitignore 文件(注意前缀是点);
  2. 在文件中写入需要忽略的文件/文件夹规则,示例:
    # 忽略所有 .txt 日志文件
    *.txt
    # 忽略 venv 虚拟环境文件夹
    venv/
    # 忽略 .idea 编辑器配置文件夹
    .idea/
    # 忽略单个文件
    test_ignore.py
    
  3. .gitignore 文件提交到仓库,Git 会自动识别并生效。
(3)规则来源

GitHub/Gitee 官网提供了各种语言/框架的 .gitignore 模板,创建仓库时可直接选择,自动生成对应规则。

5、git tag:打版本标签

作用:为项目的重要版本打标签(如 V1.0、V2.0),方便快速定位到对应版本的代码,适用于项目发布上线场景。
基础命令

git tag V1.0  # 为当前版本打标签 V1.0
git tag  # 查看所有标签
git checkout V1.0  # 切换到指定标签的版本

6、企业开发禁忌

严禁将公司的私有代码上传到个人的 GitHub/Gitee 仓库,避免代码泄露。

7、模拟协同开发作业

  1. 组长创建 Gitee 仓库,邀请团队成员为合作者
  2. 组长在仓库中创建 masterdevreview 分支;
  3. 每个成员创建自己的个人分支(如 dev_liSi);
  4. 成员在个人分支开发代码,完成后提交;
  5. 成员切换到 review 分支,拉取远程最新代码,将个人分支合并到 review 分支(解决冲突),并推送到远程;
  6. 组长审核 review 分支代码,无问题后合并到 dev 分支,并推送到远程;
  7. 项目上线时,组长将 dev 分支合并到 master 分支。

附:常见面试题

  1. 公司现场代码出现 Bug,你应该怎么办?
    答:创建独立的 bug 修复分支,在该分支上修复 Bug,修复完成后合并到 master 主分支,修复完成后回到开发分支继续开发,避免影响正常开发代码。

  2. git rebase 是什么意思/作用?
    答:rebasemerge 都是 Git 的分支合并命令,git rebase 会将分支的提交记录合并到一条主线上,让提交历史更整洁;若合并出现冲突,手动解决后执行 git rebase --skip 即可。

  3. 在公司怎么进行协同开发的呀?
    答:采用多分支规范开发,创建 master 主分支、dev 开发分支、review 审核分支,每个开发人员创建自己的个人分支;开发人员在个人分支开发,完成后合并到 review 分支由组长审核,审核通过后合并到 dev 分支,最终上线时合并到 master 分支。

  4. 公司是否做代码的 review?谁做 review?
    答:做;一般由项目组长或技术负责人负责代码审核,通常每 2 天左右审核一次。

  5. 你有没有给开源的项目贡献过代码?
    答:若有,说明具体项目和贡献内容;若无,说明贡献方式:通过 Fork 复刻开源项目到自己的仓库,修改代码后发起 Pull Request,待原项目作者审核通过后完成贡献。

  6. 如何给 Django 这类成熟的开源项目贡献代码?
    答:通过 Fork + Pull Request 方式:先 Fork 原项目到自己的远程仓库,克隆到本地修改代码并提交,然后向原项目发起 Pull Request,原项目作者审核通过后,代码会被合并到原项目,完成贡献。

    开始

    进入项目目录

    git init 初始化仓库

    git status 查看状态

    git add . 加入暂存区

    git commit -m 提交本地

    git log 查看历史

    需要版本回滚?

    git reflog 找版本号

    git reset --hard 版本号

    需要临时存代码?

    git stash 暂存

    修复bug后 git stash pop 恢复

    需要多分支开发?

    git branch 新建分支

    git checkout 切换分支

    开发完成 git merge 合并

    解决冲突

    需要同步远程?

    git remote add 关联仓库

    git push 推送到远程

    git clone / git pull 拉取更新

    git tag 打版本标签

    编写 .gitignore 忽略文件

    遵循企业分支规范:master/dev/review/个人分支

    给开源项目贡献:Fork → 修改 → PR

    结束

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐