Git完整学习总结

目录

🍸一、核心概念

1.1 三个区域

复制代码
工作区 (Working Directory) → 暂存区 (Staging Area/Index) → 本地仓库 (Local Repo) → 远程仓库 (Remote Repo)
     ↓                           ↓                           ↓
  实际文件                  git add 后                git commit 后

1.2 三个重要对象

概念 说明 查看命令
HEAD 当前所在分支的最新提交 git show HEAD
工作区 你正在编辑的文件 ls / git status
暂存区 准备提交的文件 git diff --cached

1.3 分支的本质

  • 分支只是一个指向某个提交的指针
  • 创建分支就是创建新指针
  • 切换分支就是移动 HEAD 指针

🍸二、基础命令(日常使用)

2.1 配置

bash 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.editor "vim"
git config --list  # 查看所有配置

2.2 创建和克隆

bash 复制代码
git init                    # 初始化本地仓库
git clone <URL>             # 克隆远程仓库
git clone -b <分支名> <URL> # 克隆指定分支

2.3 基本操作流程

bash 复制代码
git status                  # 查看状态(最常用)
git add <文件>              # 添加到暂存区
git add .                   # 添加所有修改
git commit -m "消息"        # 提交到本地仓库
git commit -am "消息"       # 跳过 add,直接提交已跟踪的文件

2.4 查看差异

bash 复制代码
git diff                    # 工作区 vs 暂存区
git diff --cached           # 暂存区 vs 本地仓库
git diff HEAD               # 工作区 vs 本地仓库
git diff branch1..branch2   # 两个分支的差异

2.5 查看历史

bash 复制代码
git log                     # 完整历史
git log --oneline           # 一行显示
git log --oneline --graph   # 图形化显示
git log -5                  # 最近5条
git log --grep="关键词"      # 搜索提交信息
git log --author="名字"      # 按作者搜索

🍸三、分支管理

3.1 基础分支命令

bash 复制代码
git branch                  # 查看本地分支(*表示当前)
git branch -a               # 查看所有分支(含远程)
git branch -r               # 只看远程分支
git branch -vv              # 查看本地分支跟踪的远程分支

git branch <分支名>         # 创建分支
git checkout <分支名>       # 切换分支
git checkout -b <分支名>    # 创建并切换
git switch <分支名>         # 新语法:切换分支
git switch -c <分支名>      # 新语法:创建并切换

git branch -d <分支名>      # 删除分支(已合并)
git branch -D <分支名>      # 强制删除分支

3.2 分支合并

bash 复制代码
# 场景:把 feature 分支合并到 main
git checkout main
git merge feature

# 合并后删除 feature(可选)
git branch -d feature

3.3 基于特定提交创建分支

bash 复制代码
# 基于某个历史提交创建分支
git checkout -b <新分支名> <提交哈希>

# 例如:
git checkout -b version-with-error-print abc1234

🍸四、远程仓库操作(你遇到的核心问题)

4.1 管理远程仓库

bash 复制代码
git remote -v                              # 查看远程仓库
git remote add <名称> <URL>                # 添加远程仓库
git remote remove <名称>                   # 删除远程仓库
git remote rename <旧名> <新名>            # 重命名
git remote set-url <名称> <新URL>          # 修改URL

4.2 推送(你学会的核心)

bash 复制代码
# 基本推送
git push <远程名> <本地分支名>

# 推送到远程的不同分支名(重要!)
git push <远程名> <本地分支>:<远程分支>

# 例如:推送本地 rust 到远程 main
git push origin rust:main

# 首次推送并建立跟踪
git push -u origin main

# 强制推送(谨慎使用)
git push -f origin main
git push --force origin main

# 删除远程分支
git push origin --delete <分支名>

4.3 拉取和获取

bash 复制代码
git fetch                  # 获取远程更新(不合并)
git fetch <远程名>         # 获取指定远程
git pull                   # 获取并合并(fetch + merge)
git pull --rebase          # 获取并变基

4.4 同步本地分支(你最后用到的)

bash 复制代码
# 方法1:拉取合并
git checkout main
git pull origin main

# 方法2:强制重置(本地内容会被覆盖)
git fetch origin
git reset --hard origin/main

🍸五、撤销和恢复(救命的命令)

5.1 工作区撤销

bash 复制代码
git restore <文件>         # 丢弃工作区的修改
git checkout -- <文件>     # 旧语法,功能同上

5.2 暂存区撤销

bash 复制代码
git restore --staged <文件>   # 从暂存区移除,保留工作区修改
git reset HEAD <文件>         # 旧语法

5.3 提交撤销

bash 复制代码
# 撤销最近一次提交,保留修改在工作区
git reset --soft HEAD~1

# 撤销最近一次提交,保留修改在暂存区
git reset --mixed HEAD~1

# 撤销最近一次提交,丢弃所有修改(危险)
git reset --hard HEAD~1

5.4 恢复丢失的提交(reflog 救命)

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

# 恢复某个丢失的状态
git checkout <哈希>         # 先查看
git branch recover-branch <哈希>  # 创建分支保存
git reset --hard <哈希>     # 或者直接重置

🍸六、提交历史操作

6.1 修改最后一次提交

bash 复制代码
git commit --amend          # 修改提交信息
git commit --amend --no-edit  # 添加漏掉的文件

6.2 交互式变基(整理历史)

bash 复制代码
git rebase -i HEAD~3        # 整理最近3次提交

# 常用命令:
# pick    - 保留
# reword  - 修改提交信息
# squash  - 合并到上一个提交
# drop    - 删除提交

🍸七、经验总结

  1. 原则1:分支是轻量级的

    不要怕创建分支,随便建、随便删

    每个功能、每个实验都可以开新分支

  2. 原则2:本地和远程是独立的

    本地分支和远程分支可以有不同的名字

    推送时可以指定:git push origin 本地:远程

  3. 原则3:保护分支不能强制推送

    main/master 通常是保护分支

    解决方案:推临时分支 → 网页创建 MR → 合并

  4. 原则4:提交历史是宝贵的

    每次提交都是可恢复的

  5. 原则5:重置前先备份

bash 复制代码
# 做危险操作前,先创建备份分支
git branch backup-branch

🍸八、常用别名(提高效率)

bash 复制代码
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.last "log -1 --stat"

# 使用
git st      # git status
git co main # git checkout main
git lg      # 图形化日志

🍸九、故障排查清单

相关推荐
我是发哥哈2 小时前
主流AI培训机构能力横向评测:核心维度与选型要点解析
大数据·人工智能·学习·机器学习·ai·chatgpt·aigc
DevilSeagull2 小时前
MySQL(1) 安装与配置
java·数据库·git·mysql·http·开源·github
molong9312 小时前
SIM 卡监听(电话监听)
android·学习·kotlin
小宋加油啊2 小时前
claude学习
学习
一个程序猿老马2 小时前
005、Git三板斧(1):git add - 将文件纳入版本管理
大数据·git·elasticsearch
DeepModel2 小时前
机器学习数据预处理:特征构造
人工智能·学习·算法·机器学习
qq_348231852 小时前
企业级避坑指南
人工智能·学习
Cyber4K2 小时前
【DevOps专项】Git 部署及使用方法
运维·git·devops
我的征途是星辰大海。2 小时前
设计模式(学习笔记)(第一章)
笔记·学习·设计模式