Git 完全指南:从入门到精通

Git 完全指南:从入门到精通

本文详细介绍 Git 版本控制系统的使用方法,涵盖基础概念、日常操作、分支管理、团队协作等核心内容。

文章目录

  • [Git 完全指南:从入门到精通](#Git 完全指南:从入门到精通)
    • [1. Git 简介](#1. Git 简介)
      • [1.1 什么是 Git?](#1.1 什么是 Git?)
      • [1.2 Git vs 其他版本控制系统](#1.2 Git vs 其他版本控制系统)
    • [2. 安装与配置](#2. 安装与配置)
      • [2.1 安装 Git](#2.1 安装 Git)
      • [2.2 验证安装](#2.2 验证安装)
      • [2.3 初始配置](#2.3 初始配置)
      • [2.4 查看配置](#2.4 查看配置)
      • [2.5 配置 SSH 密钥](#2.5 配置 SSH 密钥)
    • [3. 基础概念](#3. 基础概念)
      • [3.1 Git 的三个区域](#3.1 Git 的三个区域)
      • [3.2 文件状态](#3.2 文件状态)
      • [3.3 Git 对象](#3.3 Git 对象)
    • [4. 基本操作](#4. 基本操作)
      • [4.1 创建仓库](#4.1 创建仓库)
      • [4.2 查看状态](#4.2 查看状态)
      • [4.3 添加文件到暂存区](#4.3 添加文件到暂存区)
      • [4.4 提交更改](#4.4 提交更改)
      • [4.5 查看历史](#4.5 查看历史)
      • [4.6 查看差异](#4.6 查看差异)
      • [4.7 .gitignore 文件](#4.7 .gitignore 文件)
    • [5. 分支管理](#5. 分支管理)
      • [5.1 分支基础](#5.1 分支基础)
      • [5.2 创建与切换分支](#5.2 创建与切换分支)
      • [5.3 合并分支](#5.3 合并分支)
      • [5.4 变基 (Rebase)](#5.4 变基 (Rebase))
      • [5.5 删除分支](#5.5 删除分支)
      • [5.6 储藏 (Stash)](#5.6 储藏 (Stash))
    • [6. 远程仓库](#6. 远程仓库)
      • [6.1 管理远程仓库](#6.1 管理远程仓库)
      • [6.2 拉取与推送](#6.2 拉取与推送)
      • [6.3 跟踪分支](#6.3 跟踪分支)
    • [7. 撤销与回退](#7. 撤销与回退)
      • [7.1 撤销工作目录的修改](#7.1 撤销工作目录的修改)
      • [7.2 撤销暂存](#7.2 撤销暂存)
      • [7.3 回退提交](#7.3 回退提交)
      • [7.4 创建撤销提交](#7.4 创建撤销提交)
      • [7.5 恢复删除的提交](#7.5 恢复删除的提交)
    • [8. 高级技巧](#8. 高级技巧)
      • [8.1 Cherry-pick](#8.1 Cherry-pick)
      • [8.2 标签管理](#8.2 标签管理)
      • [8.3 子模块](#8.3 子模块)
      • [8.4 Git Bisect](#8.4 Git Bisect)
      • [8.5 Git Blame](#8.5 Git Blame)
      • [8.6 Git Hooks](#8.6 Git Hooks)
      • [8.7 Git Worktree](#8.7 Git Worktree)
    • [9. 团队协作工作流](#9. 团队协作工作流)
      • [9.1 Git Flow](#9.1 Git Flow)
      • [9.2 GitHub Flow](#9.2 GitHub Flow)
      • [9.3 Trunk-Based Development](#9.3 Trunk-Based Development)
      • [9.4 Fork 工作流](#9.4 Fork 工作流)
    • [10. 常见问题解决](#10. 常见问题解决)
      • [10.1 合并冲突](#10.1 合并冲突)
      • [10.2 误删分支恢复](#10.2 误删分支恢复)
      • [10.3 大文件处理](#10.3 大文件处理)
      • [10.4 清理仓库](#10.4 清理仓库)
      • [10.5 修改历史提交](#10.5 修改历史提交)
      • [10.6 统计信息](#10.6 统计信息)
    • 附录:常用命令速查表

1. Git 简介

1.1 什么是 Git?

Git 是一个分布式版本控制系统,由 Linus Torvalds 于 2005 年创建,最初用于管理 Linux 内核开发。它具有以下特点:

  • 分布式架构:每个开发者都拥有完整的代码仓库副本
  • 高性能:几乎所有操作都在本地执行,速度极快
  • 数据完整性:使用 SHA-1 哈希确保数据完整性
  • 支持非线性开发:强大的分支和合并能力

1.2 Git vs 其他版本控制系统

特性 Git SVN CVS
架构 分布式 集中式 集中式
离线工作 ✅ 完全支持 ❌ 需要网络 ❌ 需要网络
分支开销 极低 较高
速度 极快 中等

2. 安装与配置

2.1 安装 Git

Linux (Debian/Ubuntu):

bash 复制代码
sudo apt update
sudo apt install git

Linux (CentOS/RHEL):

bash 复制代码
sudo yum install git
# 或者
sudo dnf install git

macOS:

bash 复制代码
# 使用 Homebrew
brew install git

# 或者安装 Xcode Command Line Tools
xcode-select --install

Windows:

2.2 验证安装

bash 复制代码
git --version
# 输出示例: git version 2.43.0

2.3 初始配置

安装完成后,需要配置用户信息:

bash 复制代码
# 设置用户名(必须)
git config --global user.name "你的名字"

# 设置邮箱(必须)
git config --global user.email "your.email@example.com"

# 设置默认编辑器
git config --global core.editor "vim"
# 或者使用 VS Code
git config --global core.editor "code --wait"

# 设置默认分支名称
git config --global init.defaultBranch main

# 配置换行符处理(跨平台协作时很重要)
# Linux/macOS
git config --global core.autocrlf input
# Windows
git config --global core.autocrlf true

# 启用颜色输出
git config --global color.ui auto

2.4 查看配置

bash 复制代码
# 查看所有配置
git config --list

# 查看特定配置
git config user.name

# 查看配置来源
git config --list --show-origin

2.5 配置 SSH 密钥

bash 复制代码
# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "your.email@example.com"

# 启动 ssh-agent
eval "$(ssh-agent -s)"

# 添加私钥
ssh-add ~/.ssh/id_ed25519

# 查看公钥(复制到 GitHub/GitLab)
cat ~/.ssh/id_ed25519.pub

3. 基础概念

3.1 Git 的三个区域

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      工作目录 (Working Directory)            │
│                         你编辑文件的地方                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              │ git add
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      暂存区 (Staging Area / Index)           │
│                       准备提交的文件快照                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              │ git commit
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      本地仓库 (Repository / .git)            │
│                       完整的版本历史记录                      │
└─────────────────────────────────────────────────────────────┘

3.2 文件状态

Git 中的文件有四种状态:

  1. 未跟踪 (Untracked):新文件,Git 还不知道它的存在

  2. 未修改 (Unmodified):文件已被跟踪,但没有改动

  3. 已修改 (Modified):文件已修改,但还未暂存

  4. 已暂存 (Staged):文件已添加到暂存区,等待提交

    Untracked ──git add──> Staged
    │ │
    │ │ git commit
    │ ▼
    │ Unmodified
    │ │
    │ │ 编辑文件
    │ ▼
    │ Modified
    │ │
    └─────────────────────┘
    git add

3.3 Git 对象

Git 内部使用三种主要对象:

  • Blob:存储文件内容
  • Tree:存储目录结构
  • Commit:存储提交信息,指向 tree 和父提交

4. 基本操作

4.1 创建仓库

bash 复制代码
# 方式一:初始化新仓库
mkdir my-project
cd my-project
git init

# 方式二:克隆现有仓库
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git  # SSH 方式

# 克隆到指定目录
git clone https://github.com/user/repo.git my-folder

# 浅克隆(只获取最近的历史,适合大型仓库)
git clone --depth 1 https://github.com/user/repo.git

4.2 查看状态

bash 复制代码
# 查看完整状态
git status

# 简洁模式
git status -s
# 输出示例:
#  M README.md      # 已修改,未暂存
# M  src/main.cpp   # 已修改,已暂存
# MM config.json    # 暂存后又修改
# ?? new-file.txt   # 未跟踪
# A  added.txt      # 新添加到暂存区
# D  deleted.txt    # 已删除

4.3 添加文件到暂存区

bash 复制代码
# 添加单个文件
git add filename.txt

# 添加多个文件
git add file1.txt file2.txt

# 添加当前目录所有文件
git add .

# 添加所有已跟踪文件的修改
git add -u

# 添加所有文件(包括未跟踪的)
git add -A

# 交互式添加(可以选择性地暂存文件的部分内容)
git add -p

4.4 提交更改

bash 复制代码
# 基本提交
git commit -m "提交信息"

# 添加并提交(仅限已跟踪文件)
git commit -am "提交信息"

# 打开编辑器编写详细提交信息
git commit

# 修改最后一次提交
git commit --amend -m "新的提交信息"

# 修改最后一次提交(不改变提交信息)
git commit --amend --no-edit

提交信息规范(推荐):

复制代码
<类型>(<范围>): <简短描述>

<详细描述>

<关联的 issue>

常用类型:

  • feat: 新功能
  • fix: 修复 bug
  • docs: 文档更新
  • style: 代码格式(不影响功能)
  • refactor: 重构
  • test: 测试相关
  • chore: 构建/工具相关

示例:

复制代码
feat(logger): 添加异步日志支持

- 实现基于无锁队列的异步写入
- 添加配置选项控制队列大小
- 支持优雅关闭,确保日志不丢失

Closes #123

4.5 查看历史

bash 复制代码
# 查看提交历史
git log

# 简洁模式(一行一个提交)
git log --oneline

# 显示分支图
git log --oneline --graph --all

# 显示最近 n 条
git log -n 5

# 显示文件变更统计
git log --stat

# 显示具体改动
git log -p

# 按作者过滤
git log --author="名字"

# 按日期过滤
git log --since="2024-01-01" --until="2024-12-31"

# 按提交信息搜索
git log --grep="关键词"

# 查看某个文件的历史
git log -- path/to/file

# 美化输出格式
git log --pretty=format:"%h - %an, %ar : %s"

4.6 查看差异

bash 复制代码
# 查看工作目录与暂存区的差异
git diff

# 查看暂存区与最后一次提交的差异
git diff --staged
git diff --cached  # 同上

# 查看工作目录与最后一次提交的差异
git diff HEAD

# 比较两个提交
git diff commit1 commit2

# 比较两个分支
git diff branch1 branch2

# 只查看文件名
git diff --name-only

# 查看统计信息
git diff --stat

4.7 .gitignore 文件

创建 .gitignore 文件来忽略不需要跟踪的文件:

gitignore 复制代码
# 编译输出
build/
*.o
*.a
*.so
*.exe

# IDE 配置
.idea/
.vscode/
*.swp

# 依赖目录
node_modules/
vendor/

# 日志文件
*.log
logs/

# 环境配置
.env
.env.local

# 操作系统文件
.DS_Store
Thumbs.db

# 临时文件
*.tmp
*.bak
*~

常用规则语法:

  • * 匹配任意字符
  • ? 匹配单个字符
  • ** 匹配多级目录
  • ! 取反(不忽略)
  • / 开头表示根目录
  • / 结尾表示目录

5. 分支管理

5.1 分支基础

bash 复制代码
# 查看本地分支
git branch

# 查看所有分支(包括远程)
git branch -a

# 查看分支详情
git branch -v

# 查看已合并/未合并的分支
git branch --merged
git branch --no-merged

5.2 创建与切换分支

bash 复制代码
# 创建新分支
git branch feature-login

# 切换分支
git checkout feature-login
# 或者(Git 2.23+)
git switch feature-login

# 创建并切换
git checkout -b feature-login
# 或者
git switch -c feature-login

# 基于特定提交创建分支
git checkout -b hotfix abc1234

# 基于远程分支创建本地分支
git checkout -b feature origin/feature

5.3 合并分支

bash 复制代码
# 切换到目标分支
git checkout main

# 合并分支
git merge feature-login

# 合并时创建合并提交(即使可以快进)
git merge --no-ff feature-login

# 合并时压缩为一个提交
git merge --squash feature-login
git commit -m "合并 feature-login"

合并冲突处理:

bash 复制代码
# 发生冲突时,文件会包含冲突标记
<<<<<<< HEAD
当前分支的内容
=======
要合并分支的内容
>>>>>>> feature-login

# 手动编辑解决冲突后
git add conflicted-file.txt
git commit
# 或者
git merge --continue

# 放弃合并
git merge --abort

5.4 变基 (Rebase)

bash 复制代码
# 将当前分支变基到 main
git rebase main

# 交互式变基(可以编辑、合并、删除提交)
git rebase -i HEAD~3

# 交互式变基命令:
# pick   = 保留提交
# reword = 保留但修改提交信息
# edit   = 保留但停下来修改
# squash = 合并到前一个提交
# fixup  = 合并但丢弃提交信息
# drop   = 删除提交

# 解决变基冲突后继续
git rebase --continue

# 放弃变基
git rebase --abort

⚠️ 注意:不要对已推送的公共分支进行变基!

5.5 删除分支

bash 复制代码
# 删除已合并的本地分支
git branch -d feature-login

# 强制删除分支(未合并也删除)
git branch -D feature-login

# 删除远程分支
git push origin --delete feature-login
# 或者
git push origin :feature-login

5.6 储藏 (Stash)

临时保存工作进度:

bash 复制代码
# 储藏当前修改
git stash

# 储藏并添加描述
git stash save "正在开发登录功能"
# Git 2.13+ 推荐使用
git stash push -m "正在开发登录功能"

# 包含未跟踪文件
git stash -u

# 查看储藏列表
git stash list

# 恢复最近的储藏(保留储藏记录)
git stash apply

# 恢复最近的储藏(删除储藏记录)
git stash pop

# 恢复指定的储藏
git stash apply stash@{2}

# 查看储藏内容
git stash show -p stash@{0}

# 删除储藏
git stash drop stash@{0}

# 清空所有储藏
git stash clear

# 从储藏创建分支
git stash branch new-branch stash@{0}

6. 远程仓库

6.1 管理远程仓库

bash 复制代码
# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin https://github.com/user/repo.git
git remote add upstream https://github.com/original/repo.git

# 修改远程仓库 URL
git remote set-url origin git@github.com:user/repo.git

# 重命名远程仓库
git remote rename origin github

# 删除远程仓库
git remote remove upstream

# 查看远程仓库详情
git remote show origin

6.2 拉取与推送

bash 复制代码
# 获取远程更新(不合并)
git fetch origin

# 获取所有远程仓库的更新
git fetch --all

# 拉取并合并
git pull origin main
# 等同于
git fetch origin
git merge origin/main

# 拉取时使用变基
git pull --rebase origin main

# 推送到远程
git push origin main

# 推送并设置上游分支
git push -u origin main
# 之后可以直接使用
git push

# 推送所有分支
git push --all origin

# 推送标签
git push origin v1.0.0
git push --tags  # 推送所有标签

# 强制推送(谨慎使用!)
git push --force origin main
# 更安全的强制推送
git push --force-with-lease origin main

6.3 跟踪分支

bash 复制代码
# 查看跟踪关系
git branch -vv

# 设置跟踪分支
git branch -u origin/main
git branch --set-upstream-to=origin/main

# 创建跟踪分支
git checkout --track origin/feature

7. 撤销与回退

7.1 撤销工作目录的修改

bash 复制代码
# 撤销单个文件的修改
git checkout -- filename.txt
# Git 2.23+
git restore filename.txt

# 撤销所有修改
git checkout -- .
git restore .

7.2 撤销暂存

bash 复制代码
# 取消暂存单个文件
git reset HEAD filename.txt
# Git 2.23+
git restore --staged filename.txt

# 取消暂存所有文件
git reset HEAD
git restore --staged .

7.3 回退提交

bash 复制代码
# 软回退(保留修改在暂存区)
git reset --soft HEAD~1

# 混合回退(保留修改在工作目录,默认)
git reset HEAD~1
git reset --mixed HEAD~1

# 硬回退(丢弃所有修改)⚠️ 危险操作
git reset --hard HEAD~1

# 回退到指定提交
git reset --hard abc1234

7.4 创建撤销提交

bash 复制代码
# 创建一个新提交来撤销指定提交(安全,保留历史)
git revert abc1234

# 撤销多个提交
git revert abc1234 def5678

# 撤销范围
git revert HEAD~3..HEAD

# 撤销但不自动提交
git revert --no-commit abc1234

7.5 恢复删除的提交

bash 复制代码
# 查看所有操作历史
git reflog

# 恢复到之前的状态
git reset --hard HEAD@{2}

# 从 reflog 恢复分支
git checkout -b recovered-branch abc1234

8. 高级技巧

8.1 Cherry-pick

选择性地应用某个提交:

bash 复制代码
# 应用单个提交
git cherry-pick abc1234

# 应用多个提交
git cherry-pick abc1234 def5678

# 应用但不提交
git cherry-pick --no-commit abc1234

# 解决冲突后继续
git cherry-pick --continue

# 放弃
git cherry-pick --abort

8.2 标签管理

bash 复制代码
# 创建轻量标签
git tag v1.0.0

# 创建附注标签(推荐)
git tag -a v1.0.0 -m "版本 1.0.0 发布"

# 给历史提交打标签
git tag -a v0.9.0 abc1234 -m "版本 0.9.0"

# 查看标签
git tag
git tag -l "v1.*"

# 查看标签详情
git show v1.0.0

# 删除本地标签
git tag -d v1.0.0

# 删除远程标签
git push origin --delete v1.0.0

8.3 子模块

bash 复制代码
# 添加子模块
git submodule add https://github.com/user/lib.git libs/lib

# 克隆包含子模块的仓库
git clone --recursive https://github.com/user/repo.git
# 或者
git clone https://github.com/user/repo.git
git submodule init
git submodule update

# 更新子模块
git submodule update --remote

# 删除子模块
git submodule deinit libs/lib
git rm libs/lib
rm -rf .git/modules/libs/lib

8.4 Git Bisect

二分查找定位问题提交:

bash 复制代码
# 开始二分查找
git bisect start

# 标记当前版本有问题
git bisect bad

# 标记已知正常的版本
git bisect good v1.0.0

# Git 会自动切换到中间的提交
# 测试后标记结果
git bisect good  # 或 git bisect bad

# 重复直到找到问题提交

# 结束查找
git bisect reset

# 自动化测试
git bisect run ./test.sh

8.5 Git Blame

查看每行代码的最后修改者:

bash 复制代码
# 查看文件每行的作者
git blame filename.txt

# 显示行范围
git blame -L 10,20 filename.txt

# 忽略空白变化
git blame -w filename.txt

# 显示原始提交(跟踪代码移动)
git blame -C filename.txt

8.6 Git Hooks

Git 钩子位于 .git/hooks/ 目录:

常用钩子:

  • pre-commit: 提交前执行
  • commit-msg: 检查提交信息
  • pre-push: 推送前执行
  • post-merge: 合并后执行

示例 pre-commit 钩子:

bash 复制代码
#!/bin/bash
# .git/hooks/pre-commit

# 运行代码格式检查
if ! make lint; then
    echo "代码格式检查失败,请修复后再提交"
    exit 1
fi

# 运行测试
if ! make test; then
    echo "测试失败,请修复后再提交"
    exit 1
fi

8.7 Git Worktree

同时在多个分支工作:

bash 复制代码
# 创建新的工作目录
git worktree add ../hotfix hotfix-branch

# 查看工作目录
git worktree list

# 删除工作目录
git worktree remove ../hotfix

# 清理无效的工作目录
git worktree prune

9. 团队协作工作流

9.1 Git Flow

经典的分支管理策略:

复制代码
main ─────────●─────────────────●─────────────────●────
              │                 │                 │
              │    release/1.0  │                 │
              │    ┌────●───────┤                 │
              │    │            │                 │
develop ──●───┼────┼────●───────●─────●───────────┼────
          │   │    │    │             │           │
          │   │    │    │             │           │
feature/a ├───┘    │    │             │           │
                   │    │             │           │
feature/b ─────────┴────┘             │           │
                                      │           │
hotfix/1.0.1 ─────────────────────────┴───────────┘

主要分支:

  • main: 生产环境代码
  • develop: 开发主分支
  • feature/*: 功能分支
  • release/*: 发布准备分支
  • hotfix/*: 紧急修复分支

9.2 GitHub Flow

更简单的工作流:

bash 复制代码
# 1. 从 main 创建功能分支
git checkout main
git pull origin main
git checkout -b feature-xxx

# 2. 开发并提交
git add .
git commit -m "feat: 添加新功能"

# 3. 推送到远程
git push -u origin feature-xxx

# 4. 创建 Pull Request

# 5. 代码审查通过后合并

# 6. 删除功能分支
git checkout main
git pull origin main
git branch -d feature-xxx

9.3 Trunk-Based Development

主干开发模式:

  • 所有开发者直接向 main 提交
  • 使用功能开关控制未完成功能
  • 频繁集成,快速反馈

9.4 Fork 工作流

开源项目常用:

bash 复制代码
# 1. Fork 项目到自己的账户

# 2. 克隆自己的 fork
git clone git@github.com:your-username/repo.git

# 3. 添加上游仓库
git remote add upstream https://github.com/original/repo.git

# 4. 保持同步
git fetch upstream
git checkout main
git merge upstream/main

# 5. 创建功能分支
git checkout -b feature-xxx

# 6. 开发完成后推送到自己的 fork
git push origin feature-xxx

# 7. 创建 Pull Request 到上游仓库

10. 常见问题解决

10.1 合并冲突

bash 复制代码
# 查看冲突文件
git status

# 使用工具解决冲突
git mergetool

# 选择保留某一方的版本
git checkout --ours filename.txt    # 保留当前分支
git checkout --theirs filename.txt  # 保留合并分支

10.2 误删分支恢复

bash 复制代码
# 查找删除的分支
git reflog

# 恢复分支
git checkout -b recovered-branch abc1234

10.3 大文件处理

bash 复制代码
# 安装 Git LFS
git lfs install

# 跟踪大文件
git lfs track "*.psd"
git lfs track "*.zip"

# 查看跟踪的文件类型
git lfs track

# 确保 .gitattributes 被提交
git add .gitattributes

10.4 清理仓库

bash 复制代码
# 清理未跟踪的文件(预览)
git clean -n

# 清理未跟踪的文件
git clean -f

# 包括目录
git clean -fd

# 包括忽略的文件
git clean -fdx

# 垃圾回收
git gc

# 激进的垃圾回收
git gc --aggressive --prune=now

10.5 修改历史提交

bash 复制代码
# 修改最近一次提交的作者
git commit --amend --author="New Name <new@email.com>"

# 修改历史提交的作者(交互式变基)
git rebase -i HEAD~5
# 将要修改的提交标记为 edit
# 然后
git commit --amend --author="New Name <new@email.com>"
git rebase --continue

10.6 统计信息

bash 复制代码
# 查看贡献者统计
git shortlog -sn

# 查看代码行数变化
git diff --stat HEAD~10

# 查看仓库大小
git count-objects -vH

附录:常用命令速查表

命令 说明
git init 初始化仓库
git clone <url> 克隆仓库
git status 查看状态
git add <file> 添加到暂存区
git commit -m "msg" 提交
git push 推送到远程
git pull 拉取并合并
git fetch 获取远程更新
git branch 查看分支
git checkout <branch> 切换分支
git merge <branch> 合并分支
git rebase <branch> 变基
git stash 储藏修改
git log 查看历史
git diff 查看差异
git reset 回退
git revert 撤销提交
git tag 标签管理
git remote 远程仓库管理
相关推荐
胖虎130 分钟前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份
春日见11 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
stevenzqzq1 天前
git 常用操作
大数据·git
Curvatureflight1 天前
Git工作流最佳实践:从混乱到优雅
git
wu~9701 天前
GitHub永不遗忘,使用git push -f来覆盖的提交依旧保留
git·github
Vermouth_001 天前
git clone的时候提示access denied
git
qq_437657271 天前
清楚本地的git并重新登录
git
jiang_changsheng2 天前
工作流agent汇总分析 2
java·人工智能·git·python·机器学习·github·语音识别
顶点多余2 天前
版本控制器-git
linux·git
夔曦2 天前
Git工程日常下拉/上传完整流程(自用)
git