Git 仓库建立与文件过滤完整指南
本文最后更新于4 天前,其中的信息可能已经过时,如有错误请发送邮件到528407262@qq.com

本文档记录了将本地 Apollo_PnC 工程推送到 GitHub 仓库,并通过 .gitignore 实现文件过滤的完整流程。


📋 目录

  1. 项目背景与目标
  2. 环境准备
  3. 配置 .gitignore
  4. 初始化与配置仓库
  5. 清理已追踪文件
  6. 推送至远程仓库
  7. 验证结果
  8. Git 常用指令大全
  9. Linux 常用指令
  10. 常见问题与解决方案

1. 项目背景与目标

1.1 场景描述

  • 本地工程: Apollo_PnC(位于 WSL 环境)
  • 目标仓库: https://github.com/mo-fishkiller/APOLLO_EDU_WORKSPACE
  • 核心需求: 只上传特定文件(配置文件、文档),过滤掉构建产物、IDE配置、临时文件等

1.2 最终成果

GitHub 仓库只包含:

📁 APOLLO_EDU_WORKSPACE/
├── .gitignore
├── README.md
├── README_cn.md
└──  profiles/sample/modules/... (配置文件)

2. 环境准备

2.1 检查环境

# 确认 Git 已安装
git --version

# 确认当前目录
pwd

# 查看本地文件结构
ls -la

2.2 创建 GitHub 仓库

  1. 访问 GitHub: https://github.com
  2. 点击右上角 “+” → “New repository”
  3. 填写仓库名: APOLLO_EDU_WORKSPACE
  4. 选择 PublicPrivate
  5. ⚠️ 不要勾选 “Initialize this repository with a README”(保持空白)
  6. 点击 “Create repository”

3. 配置 .gitignore

3.1 编写 .gitignore 规则

创建或编辑 .gitignore 文件:

# 使用编辑器打开
nano .gitignore
# 或
vim .gitignore

写入以下内容:

# ========== 忽略所有内容 ==========
# 忽略根目录下所有文件和文件夹
/*
/.*

# ========== 白名单:保留根目录特定文件 ==========
!.gitignore
!README.md
!README_cn.md

# ========== 白名单:保留特定目录及其全部内容 ==========
# 先保留目录本身(否则无法进入目录)
!/modules/
!/profiles/
# 再保留目录内的所有文件和子目录
!/modules/**
!/profiles/**

# ========== 额外忽略(可选) ==========
# 忽略所有 .vscode 目录
**/.vscode/

3.2 规则说明

规则作用
/*忽略根目录下所有文件(非递归)
/.*忽略根目录下所有隐藏文件
!.gitignore例外:保留 .gitignore 文件
!/modules/例外:保留 modules 目录本身
!/modules/**例外:保留 modules 目录下所有内容
**/.vscode/忽略所有层级的 .vscode 目录

💡 重要: ! 开头的规则必须写在忽略规则之后,Git 按顺序处理规则。


4. 初始化与配置仓库

4.1 初始化 Git 仓库

# 进入工程目录
cd /home/morobot/application-pnc

# 初始化 Git(如果尚未初始化)
git init

# 查看当前状态
git status

4.2 配置远程仓库

# 查看现有远程配置
git remote -v

# 如果 origin 不存在,添加远程仓库
git remote add origin https://github.com/mo-fishkiller/APOLLO_EDU_WORKSPACE.git

# 如果 origin 已存在,修改 URL
git remote set-url origin https://github.com/mo-fishkiller/APOLLO_EDU_WORKSPACE.git

# 验证配置
git remote -v

预期输出:

origin  https://github.com/mo-fishkiller/APOLLO_EDU_WORKSPACE.git (fetch)
origin  https://github.com/mo-fishkiller/APOLLO_EDU_WORKSPACE.git (push)

4.3 首次提交 .gitignore

# 添加 .gitignore 到暂存区
git add .gitignore

# 提交
git commit -m "chore: add .gitignore with whitelist rules"

5. 清理已追踪文件

5.1 问题诊断

关键问题: .gitignore 只对未追踪的文件生效。如果文件之前已被 git add,修改 .gitignore 不会自动移除它们。

# 查看 Git 当前追踪的所有文件
git ls-files

# 查看最近提交涉及的文件
git diff-tree --no-commit-id --name-only -r HEAD~3..HEAD | sort | uniq

典型输出(包含不需要的文件):

.buildtool.conf.aarch64
.buildtool.conf.x86_64
.clang-format
.editorconfig
.env.aarch64
.env.x86_64
.vscode/c_cpp_properties.json
.vscode/settings.json
.workspace.json.aarch64
.workspace.json.x86_64
WORKSPACE
core/BUILD
core/cyberfile.xml
kill_all.sh
setup.sh
...

5.2 清除 Git 缓存(核心步骤)

# ⚠️ 关键命令:从 Git 索引移除所有文件(不删除本地文件!)
git rm -r --cached .

参数说明:

  • rm: 从仓库移除文件
  • -r: 递归处理目录
  • --cached: 只从 Git 索引移除,保留本地磁盘文件(安全!)
  • .: 当前目录下的所有文件

5.3 重新添加文件

# 重新添加文件(此时 .gitignore 规则生效)
git add .

# 查看暂存区状态
git status

预期输出:

On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    .buildtool.conf.aarch64
        deleted:    .clang-format
        deleted:    WORKSPACE
        deleted:    core/BUILD
        ...
        modified:   .gitignore
        new file:   profiles/sample/modules/...

5.4 验证过滤结果

# 查看当前暂存区的文件
git diff --cached --name-only

# 或查看 Git 追踪的文件
git ls-files

预期结果(只保留白名单文件):

.gitignore
README.md
README_cn.md
profiles/sample/modules/canbus/conf/canbus.conf
profiles/sample/modules/canbus/conf/canbus_conf.pb.txt
profiles/sample/modules/common/data/vehicle_param.pb.txt
...

5.5 提交清理结果

# 提交过滤后的文件结构
git commit -m "chore: apply .gitignore filter, untrack build/IDE/config files"

6. 推送至远程仓库

6.1 设置主分支

# 确保分支名为 main(GitHub 默认)
git branch -M main

6.2 推送到 GitHub

# 首次推送并设置上游分支
git push -u origin main

参数说明:

  • -u: 设置 upstream(上游分支),后续可直接使用 git push

6.3 认证方式

方式 A: HTTPS + Token(推荐临时使用)

# 推送时会提示:
Username for 'https://github.com': mo-fishkiller
Password for 'https://mo-fishkiller@github.com': 

# ⚠️ 密码处输入 GitHub Personal Access Token(不是登录密码!)
# 生成 Token: https://github.com/settings/tokens

方式 B: SSH(推荐长期使用)

# 1. 修改远程 URL 为 SSH
git remote set-url origin git@github.com:mo-fishkiller/APOLLO_EDU_WORKSPACE.git

# 2. 生成 SSH 密钥(如果尚未生成)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 3. 查看公钥
cat ~/.ssh/id_ed25519.pub

# 4. 将公钥添加到 GitHub
# 👉 https://github.com/settings/keys

# 5. 测试连接
ssh -T git@github.com

# 6. 再次推送
git push -u origin main

6.4 后续推送

# 设置上游分支后,后续只需:
git add .
git commit -m "feat: add new feature"
git push

7. 验证结果

7.1 命令行验证

# 查看远程仓库的文件树
git ls-tree -r --name-only origin/main

# 查看远程分支信息
git branch -r

# 查看远程仓库 URL
git remote -v

7.2 GitHub 网页验证

访问仓库页面:
👉 https://github.com/mo-fishkiller/APOLLO_EDU_WORKSPACE

检查项:

  • ✅ 只包含 .gitignore, README*.md, profiles/ 等白名单文件
  • ✅ 没有 .vscode/, build/, WORKSPACE, .env.* 等文件
  • ✅ 提交历史显示最新的过滤提交

7.3 本地状态检查

# 确认工作区干净
git status

# 预期输出:
# On branch main
# Your branch is up to date with 'origin/main'.
# nothing to commit, working tree clean

8. Git 常用指令大全

8.1 仓库初始化与配置

# 初始化新仓库
git init

# 克隆远程仓库
git clone <url>
git clone <url> <directory-name>

# 查看远程仓库
git remote -v

# 添加远程仓库
git remote add origin <url>

# 修改远程仓库 URL
git remote set-url origin <new-url>

# 删除远程仓库
git remote remove origin

# 查看远程仓库详细信息
git remote show origin

8.2 文件状态与查看

# 查看仓库状态
git status
git status -s          # 简洁格式

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

# 查看提交历史
git log
git log --oneline      # 简洁格式
git log --oneline -10  # 最近10条
git log --graph        # 图形化显示

# 查看 Git 追踪的文件
git ls-files
git ls-files -s        # 显示详细信息

# 查看被忽略的文件
git ls-files -o --ignored --exclude-standard

# 查看文件差异
git diff               # 工作区 vs 暂存区
git diff --cached      # 暂存区 vs HEAD
git diff HEAD~1        # 当前 vs 上一次提交

# 查看某次提交的文件
git show --stat <commit-hash>
git diff-tree --no-commit-id --name-only -r <commit-hash>

8.3 暂存与提交

# 添加文件到暂存区
git add <file>
git add .              # 添加所有文件
git add -A             # 添加所有变更(包括删除)
git add -u             # 只添加已追踪的文件

# 预览 add 效果
git add --dry-run .

# 从暂存区移除
git restore --staged <file>
git reset HEAD <file>  # 旧版本语法

# 提交
git commit -m "提交信息"
git commit -am "信息"  # 添加并提交已追踪的文件

# 修改上一次提交
git commit --amend -m "新的提交信息"
git commit --amend --no-edit  # 不修改信息,只添加文件

# 撤销提交(保留修改)
git reset HEAD~1
git reset --soft HEAD~1

# 彻底撤销提交(删除修改)
git reset --hard HEAD~1

8.4 .gitignore 相关

# 清除 Git 缓存(从索引移除,保留本地文件)
git rm -r --cached .
git rm --cached <file>

# 重新应用 .gitignore 规则
git rm -r --cached . && git add .

# 检查文件为何被忽略
git check-ignore -v <file>
git check-ignore -v *.log

# 查看 .gitignore 规则匹配
git check-ignore -v -n <file>

# 强制添加被忽略的文件
git add -f <file>

8.5 分支管理

# 创建分支
git branch <branch-name>

# 切换分支
git checkout <branch-name>
git switch <branch-name>  # Git 2.23+

# 创建并切换分支
git checkout -b <branch-name>
git switch -c <branch-name>

# 重命名分支
git branch -m <new-name>

# 删除分支
git branch -d <branch-name>       # 安全删除
git branch -D <branch-name>       # 强制删除

# 合并分支
git merge <branch-name>

# 查看分支合并情况
git branch --merged
git branch --no-merged

8.6 远程操作

# 推送
git push origin <branch>
git push -u origin main    # 首次推送并设置上游
git push --all origin      # 推送所有分支
git push --tags            # 推送标签

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

# 拉取
git pull origin main
git pull --rebase origin main  # 变方式拉取

# 获取远程更新(不合并)
git fetch origin
git fetch --all

# 查看远程分支
git branch -r
git branch -a

# 追踪远程分支
git checkout -b <local-branch> origin/<remote-branch>
git branch --set-upstream-to=origin/<branch> <branch>

8.7 标签管理

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

# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "版本 1.0.0"  # 附注标签

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

# 删除标签
git tag -d v1.0.0
git push origin --delete v1.0.0

8.8 撤销与恢复

# 丢弃工作区修改
git restore <file>
git restore .            # 丢弃所有修改
git checkout -- <file>   # 旧版本语法

# 撤销暂存
git restore --staged <file>
git reset HEAD <file>

# 撤销提交
git reset HEAD~1         # 保留修改
git reset --hard HEAD~1  # 删除修改

# 恢复删除的文件
git checkout <commit-hash> -- <file>

# 查看操作历史
git reflog

8.9 清理与维护

# 清理未追踪的文件
git clean -n             # 预览
git clean -f             # 执行
git clean -fd            # 包括目录
git clean -fdx           # 包括忽略的文件

# 垃圾回收
git gc
git gc --prune=now

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

# 修剪远程分支
git fetch --prune
git remote prune origin

8.10 高级操作

# 变基
git rebase <branch>
git rebase -i HEAD~3     # 交互式变基

# 暂存更改
git stash
git stash list
git stash pop
git stash apply
git stash drop

# 拣选提交
git cherry-pick <commit-hash>

# 二分查找 bug
git bisect start
git bisect bad
git bisect good <commit-hash>
git bisect reset

# 查看谁修改了代码
git blame <file>
git log -p <file>

8.11 配置与别名

# 查看配置
git config --list
git config --global --list

# 设置配置
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
git config --global core.editor "vim"
git config --global init.defaultBranch main

# 创建别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage "reset HEAD --"
git config --global alias.last "log -1 HEAD"

# 使用别名
git st      # 等同于 git status
git co -b feature  # 等同于 git checkout -b feature

9. Linux 常用指令

9.1 文件与目录操作

# 查看当前目录
pwd

# 列出文件
ls
ls -l           # 详细信息
ls -a           # 显示隐藏文件
ls -la          # 组合
ls -lh          # 人类可读大小
ls -t           # 按时间排序
ls -S           # 按大小排序

# 切换目录
cd /path/to/dir
cd ..           # 返回上级
cd ~            # 返回家目录
cd -            # 返回上一个目录
cd $OLDPWD      # 同上

# 创建目录
mkdir dirname
mkdir -p a/b/c  # 递归创建
mkdir dir1 dir2 # 创建多个

# 创建文件
touch filename
echo "content" > filename
echo "line1" >> filename  # 追加

# 复制
cp file1 file2
cp -r dir1 dir2      # 递归复制目录
cp -i file1 file2    # 覆盖前提示
cp -u file1 file2    # 只复制更新的

# 移动/重命名
mv oldname newname
mv file /path/to/dir
mv -i file1 file2    # 覆盖前提示

# 删除
rm file
rm -r dirname        # 递归删除目录
rm -f file           # 强制删除
rm -rf dirname       # ⚠️ 强制递归删除(危险!)
rm -i file           # 删除前提示

9.2 文件查看与编辑

# 查看文件内容
cat filename
less filename        # 分页查看(按 q 退出)
more filename        # 分页查看
head filename
head -n 20 filename  # 前20行
tail filename
tail -f logfile      # 实时查看(Ctrl+C 退出)
tail -n 50 logfile   # 后50行

# 文本编辑器
nano filename        # 简单编辑器
vim filename         # 高级编辑器
vi filename          # vi 编辑器
code filename        # VS Code

# Vim 基础命令
# i - 进入插入模式
# Esc - 退出插入模式
# :w - 保存
# :q - 退出
# :wq - 保存并退出
# :q! - 强制退出不保存
# /keyword - 搜索
# n - 下一个匹配
# dd - 删除一行
# yy - 复制一行
# p - 粘贴

9.3 文件搜索

# 查找文件
find /path -name "filename"
find . -name "*.py"           # 查找 Python 文件
find . -type f -name "*.txt"  # 只查找文件
find . -type d -name "build"  # 只查找目录
find . -size +100M            # 大于 100M
find . -mtime -7              # 7天内修改过

# 查找内容
grep "keyword" filename
grep -r "keyword" .           # 递归搜索
grep -i "keyword" file        # 忽略大小写
grep -l "keyword" .           # 只显示文件名
grep -n "keyword" file        # 显示行号
grep -v "keyword" file        # 反向匹配
grep -E "pattern" file        # 扩展正则

# 组合使用
find . -name "*.py" | xargs grep "def main"
grep -r "TODO" --include="*.py" .

9.4 权限与所有权

# 查看权限
ls -l

# 权限说明
# -rwxr-xr-x
# 文件类型(rwx)用户(rwx)组(rwx)其他
# r=4, w=2, x=1

# 修改权限
chmod +x script.sh          # 添加执行权限
chmod -x script.sh          # 移除执行权限
chmod 755 file              # rwxr-xr-x
chmod 644 file              # rw-r--r--
chmod 600 file              # rw-------
chmod -R 755 dir/           # 递归修改

# 修改所有者
chown user:group file
chown -R user:group dir/    # 递归修改
sudo chown root:root file   # 需要 sudo

9.5 压缩与解压

# tar
tar -czvf archive.tar.gz dir/     # 压缩为 .tar.gz
tar -xzvf archive.tar.gz          # 解压 .tar.gz
tar -cjvf archive.tar.bz2 dir/    # 压缩为 .tar.bz2
tar -xjvf archive.tar.bz2         # 解压 .tar.bz2
tar -tf archive.tar.gz            # 查看内容

# zip
zip -r archive.zip dir/           # 压缩
unzip archive.zip                 # 解压
unzip -l archive.zip              # 查看内容
zip -d archive.zip file           # 删除文件

# gzip
gzip file                         # 压缩为 .gz
gunzip file.gz                    # 解压
gzip -d file.gz                   # 同上

9.6 系统信息

# 系统信息
uname -a              # 所有信息
uname -r              # 内核版本
cat /etc/os-release   # 系统版本
hostname              # 主机名

# 磁盘空间
df -h                 # 文件系统使用
df -i                 # inode 使用
du -sh dirname        # 目录大小
du -h --max-depth=1   # 一级子目录大小
du -ah | sort -hr | head -10  # Top 10 大文件

# 内存
free -h               # 内存使用
free -m               # 以 MB 显示

# CPU
lscpu                 # CPU 信息
nproc                 # CPU 核心数
top                   # 实时进程监控
htop                  # 增强版 top

# 网络
ip addr               # IP 地址
ifconfig              # 旧版命令
ping google.com       # 测试连通性
curl ifconfig.me      # 查看公网 IP

9.7 进程管理

# 查看进程
ps aux                # 所有进程
ps aux | grep python  # 搜索进程
top                   # 实时监控
htop                  # 增强版

# 查看端口
netstat -tuln         # 监听端口
ss -tuln              # 新版命令
lsof -i :8080         # 查看端口占用

# 进程控制
kill PID              # 终止进程
kill -9 PID           # 强制终止
kill -15 PID          # 优雅终止
pkill processname     # 按名称终止
killall processname   # 同上

# 后台运行
command &             # 后台运行
jobs                  # 查看作业
fg %1                 # 带到前台
bg %1                 # 后台继续
nohup command &       # 退出终端后继续运行

9.8 网络相关

# 下载文件
wget url
wget -O filename url          # 指定文件名
wget -c url                   # 断点续传
curl -O url                   # 下载
curl -o filename url          # 指定文件名

# 网络测试
ping host                     # 测试连通性
traceroute host               # 路由追踪
mtr host                      # 结合 ping 和 traceroute

# 端口扫描
n localhost                   # 扫描本地端口
n -p 80,443 host              # 扫描指定端口

# SSH
ssh user@host                 # 远程连接
ssh -p 2222 user@host         # 指定端口
scp file user@host:/path      # 复制文件
scp user@host:/path/file .    # 下载文件

9.9 管道与重定向

# 重定向
command > file                # 覆盖输出
command >> file               # 追加输出
command 2> error.log          # 重定向错误
command > file 2>&1           # 重定向所有输出
command &> file               # 同上(bash)

# 管道
ls -la | grep ".git"
cat file | wc -l              # 统计行数
ps aux | grep python | wc -l  # 统计进程数

# xargs
find . -name "*.txt" | xargs rm
find . -name "*.jpg" | xargs -I {} mv {} backup/
cat files.txt | xargs -n 1    # 每次处理1个

# tee(同时输出到屏幕和文件)
command | tee output.log
command | tee -a output.log   # 追加

9.10 WSL 特有指令

# 访问 Windows 文件
cd /mnt/c/Users/username
cd /mnt/d/Projects

# 在 Windows 中打开
explorer.exe .                # 打开当前目录
code .                        # VS Code 打开
notepad.exe file.txt          # 记事本打开

# Windows 命令
/mnt/c/Windows/System32/cmd.exe /c dir
powershell.exe -Command "Get-Process"

# 网络
# WSL2 中 localhost 可能不互通,使用 Windows IP
cat /etc/resolv.conf          # 查看 nameserver

10. 常见问题与解决方案

10.1 .gitignore 不生效

问题: 修改了 .gitignore,但文件仍然被追踪。

原因: .gitignore 只对未追踪的文件生效。

解决方案:

# 清除缓存并重新添加
git rm -r --cached .
git add .
git commit -m "apply gitignore"

10.2 误提交了敏感文件

问题: 不小心提交了密码、密钥等敏感文件。

解决方案:

# 1. 从最近一次提交移除
git reset HEAD~1
# 编辑 .gitignore 添加敏感文件
git add .
git commit -m "..."

# 2. 如果已推送,从历史中彻底删除
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch path/to/secret" \
  --prune-empty --tag-name-filter cat -- --all

# 强制推送
git push origin --force --all

10.3 推送被拒绝

问题: git push 提示 “rejected”。

原因: 远程仓库有本地没有的提交。

解决方案:

# 方案1: 先拉取再推送
git pull origin main
git push origin main

# 方案2: 变基后推送
git pull --rebase origin main
git push origin main

# 方案3: 强制推送(⚠️ 会覆盖远程)
git push -f origin main

10.4 忘记添加文件

问题: 提交后发现漏了文件。

解决方案:

# 添加遗漏的文件
git add forgotten_file.txt

# 修改上一次提交
git commit --amend --no-edit

# 推送(需要强制)
git push -f origin main

10.5 分支名称不一致

问题: 本地是 master,远程是 main

解决方案:

# 重命名本地分支
git branch -m master main

# 设置上游分支
git push -u origin main

10.6 大文件误提交

问题: 提交了大文件导致仓库体积过大。

解决方案:

# 使用 Git LFS(Large File Storage)
git lfs install
git lfs track "*.psd"
git lfs track "*.zip"

# 或者从历史中移除
git filter-branch --tree-filter 'rm -f largefile.zip' HEAD
git push -f origin main

10.7 认证失败

问题: HTTPS 推送时认证失败。

解决方案:

# 方案1: 使用 Personal Access Token
# 生成 Token: https://github.com/settings/tokens
# 使用 Token 代替密码

# 方案2: 切换到 SSH
git remote set-url origin git@github.com:user/repo.git

# 方案3: 保存凭证
git config --global credential.helper cache
# 或永久保存
git config --global credential.helper store

10.8 冲突解决

问题: 合并或拉取时出现冲突。

解决方案:

# 1. 查看冲突文件
git status

# 2. 编辑冲突文件(解决 <<<<<<< 和 >>>>>>> 标记)

# 3. 标记为解决
git add resolved_file.txt

# 4. 完成合并
git commit

# 或取消合并
git merge --abort

10.9 恢复删除的文件

问题: 误删了重要文件。

解决方案:

# 从最近一次提交恢复
git checkout HEAD -- filename

# 从指定提交恢复
git checkout <commit-hash> -- filename

# 查看文件历史
git log -- filename
git reflog

10.10 查看谁修改了代码

问题: 想知道某行代码是谁、何时修改的。

解决方案:

# 查看文件每一行的作者
git blame filename

# 查看具体提交
git show <commit-hash>

# 查看文件修改历史
git log -p filename
git log --stat filename

📌 快速参考卡片

Git 核心流程

# 日常开发
git pull origin main
git checkout -b feature/new-feature
# ... 编写代码 ...
git add .
git commit -m "feat: add new feature"
git push -u origin feature/new-feature
# 创建 Pull Request

# 应用 .gitignore
git rm -r --cached .
git add .
git commit -m "chore: apply gitignore"
git push

常用组合

# 查看状态并清理
git status && git clean -fdn

# 查看大文件
find . -type f -size +100M -exec ls -lh {} \;

# 统计代码行数
find . -name "*.py" -o -name "*.cpp" | xargs wc -l

# Git 忽略并提交
git rm -r --cached . && git add . && git commit -m "apply gitignore"

# 查看磁盘使用 Top 10
du -h --max-depth=1 | sort -hr | head -10

快捷别名(添加到 ~/.gitconfig)

[alias]
    st = status
    co = checkout
    br = branch
    ci = commit
    last = log -1 HEAD
    unstage = reset HEAD --
    visual = !gitk

📚 学习资源

  • 官方文档: https://git-scm.com/doc
  • Pro Git 书籍: https://git-scm.com/book/zh/v2
  • GitHub 指南: https://docs.github.com/zh/get-started
  • Git 可视化学习: https://learngitbranching.js.org/
  • Linux 命令手册: https://man7.org/linux/man-pages/

文档版本: v1.0
最后更新: 2026-04-12
作者: mo-fishkiller


如有问题或建议,欢迎在 GitHub 提交 Issue!

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇