基础概念

Git 是什么

Git 是一个 分布式版本控制系统(DVCS),用于跟踪文件的修改记录,尤其适合团队协作开发代码。

核心概念

仓库(Repository)

提交(Commit)

分支(Branch)

暂存区(Staging Area / Index)

HEAD 指针

Git 与 GitHub / GitLab / Gitee 的关系

Git(核心工具)

  • 定义:分布式版本控制系统(DVCS),用于在本地和远程管理代码的版本历史。

  • 作用

    • 跟踪文件修改历史

    • 支持分支管理、合并、回滚

    • 提供本地仓库和远程仓库操作接口

GitHub / GitLab / Gitee(平台/服务)

  • 定义:基于 Git 的 代码托管平台,提供远程仓库和协作功能。

  • 功能

    • 远程仓库托管:保存 Git 仓库,可与团队成员共享代码

    • 协作工具:Pull Request / Merge Request、代码评审、Issue 管理

    • CI/CD 集成:自动化构建、测试、部署

    • 权限管理:控制谁可以访问和修改仓库

  • 例子

    • GitHub:国际知名,开源社区活跃

    • GitLab:可自建私有服务器,适合企业内部管理

    • Gitee(码云):国内托管平台,适合国内团队

关系总结

  • Git 是工具 → 本地管理代码、操作版本

  • GitHub / GitLab / Gitee 是服务 → 提供远程仓库和团队协作环境

  • 开发流程中:

本地 Git 仓库 <-> 远程平台仓库(GitHub/GitLab/Gitee)

开发者在本地用 Git 提交、分支、合并,通过 push / pull 与远程仓库同步,团队成员通过远程仓库共享和协作

环境配置

  • 安装 Git(Windows / Mac / Linux)

  • 配置用户名与邮箱:

  • 配置常用别名(可选):

  • SSH Key / HTTPS 访问配置

生成 SSH Key :在电脑终端输入 ssh-keygen -t rsa -C "your_email@ecoflow.com",连续回车,直到在 ~/.ssh 目录下出现 id_rsa.pubid_rsa 文件,其中 id_rsa.pub 就是需要的 SSH Key。

基础命令

仓库管理

git clone –拉取代码指令

git clone 是 Git 中用于 从远程仓库复制(克隆)一个完整仓库到本地 的命令。执行后,会在当前目录创建一个 以仓库名命名的文件夹,里面包含仓库内容和 .git 目录。

使用语法

克隆仓库

克隆指定分支

浅克隆(只下载最新的提交)

git init –初始化新的 Git 仓库

在当前目录执行后,会:

  • 创建一个 .git 文件夹(里面存储 Git 的对象、索引、配置等信息)

  • 让这个目录变成一个 Git 仓库

  • 可以开始使用 git addgit commit 等命令来管理版本

使用语法

将仓库初始化到指定目录如果 <directory> 不存在,Git 会自动创建该目录并初始化仓库。

文件操作

git add –将文件添加至暂存区

git add 是 Git 中用来 把文件的修改添加到暂存区(Staging Area) 的命令。它是git commit之前的准备步骤。git add 并不会真正保存到 Git 历史,只是暂存。修改文件后,需要重新 git add,否则提交不会包含最新修改。

使用语法

将指定文件的当前修改添加到暂存区,可以添加指定的多个文件

添加所有文件至暂存区

添加所有 .js 文件至暂存区

添加所有文件(包括删除的)至暂存区

只添加已跟踪的文件至暂存区

阶段性添加,Git 会交互式地逐块(hunk)询问是否添加,适合在同一个文件里,只提交部分修改

git reset –取消暂存

git reset主要用于 撤销修改或取消暂存

基本语法

<commit>:要回退到的目标提交(commit ID 或 HEAD~1 等)

<mode>:重置的方式,不同模式作用不同

soft模式:移动HEAD 指针到指定 commit,用于想修改最近的提交,并保留文件改动到暂存区

mixed模式:移动 HEAD 指针,同时清空暂存区,工作区文件保持修改状态

hard模式:移动head指针,同时清空暂存区和工作区的修改

⚠️ 使用 --hard 时要非常小心,容易丢失数据。

取消暂存文件

相当于把文件从暂存区移回工作区

git commit –提交代码

git commit 是 Git 中 将暂存区(Staging Area)里的修改保存到本地仓库(Repository) 的命令。

基本用法

-m--message 的简写,用于传入提交信息。

这个命令的意思是:

  • 把当前**已暂存(staged)**的更改提交到本地仓库中;

  • 这次提交的说明是:”修复登录页面按钮样式”

❗️Git commit之前必须先git add,先检查一下要新增的代码有没有什么问题,如果没有问题git add之后执行git commit。git commit之后需要git push将代码推到云端

常用选项

-am

自动把 已跟踪文件的修改 添加到暂存区并提交

–amend

修改最近一次提交

可以更新提交信息或合并新修改

这样会把暂存区的修改合并到上一次提交中,原来的 commit ID 会改变

将暂存区的修改合并到上一次提交中,不修改提交信息

commit提交规范

pnpm run commit

部门撰写的代码提交脚本

git status –仓库状态

git status 是 Git 中用来查看当前仓库状态的命令,可以帮助你了解哪些文件被修改、哪些文件在暂存区、哪些文件未跟踪等。

基本语法

执行后,会显示:

查看历史

git log –提交历史

git log 是 Git 中用来查看提交历史的命令。它会按时间倒序列出仓库的提交记录,包括提交 ID、作者、日期和提交信息。

基本语法

如果需要简短显示提交历史,可以执行下面的命令

如果想要查看指定作者的分支可以执行下面的命令

git diff –查看文件差异

git diff 是 Git 中用于 查看文件修改差异 的命令,它可以显示当前工作区或暂存区与提交之间的变化。

查看工作区和暂存区之间的差异,显示 未暂存的修改

查看暂存区和最新提交之间的差异,显示已暂存但未提交的修改,用于在提交前确认将提交的内容。

查看工作区和最新提交之间的差异,显示所有未提交的改动,包括暂存区和未暂存的修改。

比较两个提交之间的差异,只对指定文件显示差异

分支管理

git分支的含义

创建/切换分支

git branch –管理和查看分支

git branch 是 Git 中用于管理和查看分支(branch)的命令。

基本语法

查看所有分支

显示本地所有分支

当前所在分支会带 *

创建分支

创建一个新分支,但不会自动切换到该分支

创建并切换分支

创建一个新分支,并自动切换到该分支

删除分支

删除本地分支,如果分支未合并,会提示错误

强制删除分支

强制删除未合并分支

重命名分支

重命名当前或指定分支

Git checkout –切换分支

git checkout 是 Git 中一个多功能命令,主要用于 切换分支或恢复文件到指定状态。在新版本的gti中,切换分支更推荐使用 git switch,恢复文件使用 git restore

切换到已有分支

创建并切换分支

恢复到某一个提交的状态

恢复指定文件到某次提交的状态

合并分支

Git merge

Git merge命令是 Git 中用于合并两个分支内容的命令。它将另一个分支的代码变更合并到当前分支中。

比如你有两个分支:

  • main:主分支

  • feature/login:你在开发登录功能的分支

当你在 feature/login 上开发完成后,想把它合并回主分支:

删除分支

git branch -d

git branch -d 是 Git 中用来 删除本地分支 的命令。它会删除指定分支,但只有在分支已经被合并到当前分支或其他分支时才允许删除,否则 Git 会报错提示。

远程仓库协作

连接远程仓库

git remote

查看远程分支

添加远程仓库

推送和拉取

git push –推送到远程仓库

git push 命令用于从将本地的分支版本上传到远程并合并。会把当前分支的最新提交推送到默认的远程仓库(通常是 origin)和远程对应分支。

执行git push之后,分支会被合并到远程,可以在远程仓库中看到,git push时分支尽量写全,否则可能因为指针会导致分支被push到其他分支。

推送代码到指定的云端仓库

  • origin 是远程仓库名(默认是 origin

  • 云端仓库是你要推送的分支名

git pull –拉取远程仓库代码

拉取代码,拉取完代码之后需要执行pnpm install 更新代码

git fetch只拉不合并git pull拉完立即合并(相当于 fetch + merge)。

基本语法

git fetch –获取分支信息

git fetch 是 Git 中用来 从远程仓库获取最新的提交、分支和标签信息 的命令,但不会自动合并到本地分支。它只会更新本地的远程跟踪分支,让你知道远程仓库的最新状态。

基本语法

<remote>:远程仓库名称,通常是 origin

git删除远程分支

Git 中用于 删除远程仓库分支 的命令。它会告诉远程仓库(通常是 origin)删除指定的分支。

gitlab合并请求

在gitlab上合并请求

“合并请求”(Merge Request,简称 MR,在 GitHub 中叫 Pull Request,简称 PR)是协作式开发中非常核心的概念,主要用于将一个分支的代码合并到另一个分支,比如开发分支合并到主分支。

合并请求是一种代码审查和协作机制,用于把某个分支的修改合并到目标分支,并让其他人有机会先审查这次修改

🧩 合并请求的基本流程(如 GitLab / GitHub):

  1. 开发新功能或修复 bug

    • 通常从主分支 main / master 创建一个新分支(如 feature/login)。

    • 在这个新分支中编写、提交你的代码。

  2. 发起合并请求(PR 或 MR)

    • 提交后,在平台上点击“新建 Merge Request”。

    • 说明你做了什么(如:修复了登录页面 bug)。

  3. 团队审查(Code Review)

    • 其他开发者可以查看你的代码、评论、建议修改。

    • 有问题时你可以继续提交代码,MR 会自动更新。

  4. CI 测试检查(自动化测试)

    • 很多项目设置了 CI/CD 流水线,自动跑测试,保证代码质量。
  5. 通过后合并

    • 审查通过、测试通过后,可以点击“Merge”按钮。

    • 你的分支代码就被合并到目标分支了。

git高级用法

git cherry pick

git cherry-pick 是 Git 的高级操作,用于 将某个分支上的单个或多个提交应用到当前分支,而不需要合并整个分支。它常用于挑选特定功能或 bug 修复提交到其他分支。

基本语法

<commit>:要应用的提交 SHA-1 哈希值

使用场景

  1. 将 bug 修复从开发分支挑到主分支

  2. 查看开发分支的提交历史

  3. 使用 Cherry-pick 应用提交

  4. 如果过程发生冲突

可以解决冲突

也可以放弃cherry pick

git stash

git stash 是 Git 中的 临时保存机制,用于将当前工作区和暂存区的修改 临时存放到一个栈(stash stack)中,恢复到上一次提交的干净状态。存放顺序遵循 栈的特点:后存入的先取出(LIFO,后进先出)。

查看当前stash中的条目

保存修改到 stash

  • 工作区 + 暂存区 的修改保存到 stash 栈中

  • 工作区和暂存区恢复到上一次提交状态

  • 可以为此次保存添加描述性注释,方便后续查看

应用stash

应用最近的 stash 并从栈中删除

应用指定 stash

删除指定 stash

清空所有 stash

git rebase

git rebase 是 Git 的一个高级操作,用于 将一个分支上的提交“移动”到另一个分支的最前端,从而保持提交历史整洁。相比 mergerebase 可以让分支历史更线性。

基本语法

<commit>:指定你想从哪次提交开始整理历史,例如 HEAD~5 表示最近 5 次提交

修改历史操作

在编辑界面中,你可以替换命令以处理提交: