飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 基础入门

    • Linux 命令概述与环境准备
    • 文件与目录操作(上):ls、cd、pwd
    • 文件与目录操作(下):cat、touch、mkdir、rm、cp、mv
    • 获取帮助与基础工具:man、help、clear、exit、sudo
  • 文件权限

    • 文件权限管理:chmod、chown
  • 系统与监控

    • 进程管理与系统监控:ps、top、kill、df、du、free
    • 用户与环境:whoami、id、env、echo、history
  • 网络命令

    • 网络诊断(上):ping、curl、wget
    • 网络诊断(下):netstat、ss、ip
    • 网络抓包与高级工具:traceroute、tcpdump、nc
    • DNS 与防火墙:nslookup、dig、iptables
  • 文本处理

    • 文本搜索:grep
    • 文本处理(上):awk
    • 文本处理(下):sed
    • 文本排序与统计:sort、uniq、wc
    • 文件查看与查找:head、tail、cut、find
    • 归档压缩与管道组合:tar、gzip、xargs
  • 开发工具

    • 开发工具链(上):gcc、make
    • 开发工具链(下):gdb、time
    • 版本控制:git
    • 远程操作:ssh、scp
    • 编辑器:vim、nano
  • Shell 编程

    • Shell 编程基础(上):变量、管道、重定向
    • Shell 编程基础(下):条件、循环、函数
  • 综合实战

    • 综合实战:日志分析

版本控制:git

git 核心概念

git 是分布式版本控制系统,由 Linus Torvalds 于 2005 年为 Linux 内核开发而创建。它是现代软件开发的基石工具。

三个区域

区域作用对应命令
工作区(Working Directory)实际编辑的文件直接编辑
暂存区(Staging Area)准备提交的更改快照git add
本地仓库(Repository)完整的版本历史git commit

基础命令

仓库初始化与克隆

# 初始化新仓库
git init

# 克隆远程仓库
git clone https://github.com/user/repo.git

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

# 克隆指定分支
git clone -b branch-name https://github.com/user/repo.git

日常 workflow

# 查看工作区状态
git status

# 添加文件到暂存区
git add file.txt              # 添加单个文件
git add .                     # 添加所有更改
git add -p                    # 交互式添加(选择部分更改)

# 提交更改
git commit -m "提交说明"
git commit -m "标题" -m "详细描述"

# 查看提交历史
git log
git log --oneline             # 简洁显示
git log --graph --oneline     # 图形化显示分支
git log -p                    # 显示每次提交的差异
git log --stat                # 显示统计信息

# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最新提交的差异
git diff --staged
# 或
git diff --cached

分支管理

分支是 git 最强大的特性,允许并行开发而不互相干扰。

# 查看分支
git branch                    # 本地分支
git branch -a                   # 所有分支(含远程)
git branch -v                   # 显示分支最新提交

# 创建分支
git branch feature-x          # 创建分支(不切换)
git checkout -b feature-x     # 创建并切换分支
# 或
git switch -c feature-x       # 新命令(Git 2.23+)

# 切换分支
git checkout main
git switch main               # 新命令

# 合并分支
git checkout main
git merge feature-x

# 删除分支
git branch -d feature-x       # 已合并的分支
git branch -D feature-x       # 强制删除(未合并)

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

分支策略

远程操作

# 查看远程仓库
git remote -v

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

# 推送到远程
git push origin main          # 推送到 origin 的 main 分支
git push -u origin main       # 首次推送,设置上游分支

# 拉取远程更改
git pull origin main          # 拉取并合并
git fetch origin              # 只拉取,不合并
git merge origin/main         # 合并拉取的更改

# 删除远程分支
git push origin --delete feature-x

撤销与回退

# 撤销工作区的修改(未 add)
git checkout -- file.txt      # 丢弃工作区修改

# 撤销暂存区的修改(已 add 未 commit)
git reset HEAD file.txt       # 从暂存区移除

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

# 回退到指定版本(保留修改)
git reset --soft HEAD~1       # 回退 1 次提交,修改保留在暂存区

# 回退到指定版本(保留修改但不暂存)
git reset --mixed HEAD~1      # 默认,修改保留在工作区

# 回退到指定版本(丢弃修改)
git reset --hard HEAD~1       # ⚠️ 危险,修改会丢失

# 查看所有操作历史(用于找回)
git reflog

# 回退到 reflog 中的某个状态
git reset --hard HEAD@{2}

撤销场景对照表

场景命令效果
改错了文件,未 addgit checkout -- file丢弃工作区修改
add 错了文件,未 commitgit reset HEAD file从暂存区移除
commit 说明写错了git commit --amend修改最后一次提交说明
commit 错了,想保留修改git reset --soft HEAD~1回退提交,修改保留在暂存区
commit 错了,想重新开始git reset --hard HEAD~1⚠️ 回退提交,修改全部丢弃

标签管理

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

# 查看标签
git tag
git show v1.0.0

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

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

本篇小结

  • git 三区域:工作区(编辑)→ 暂存区(git add)→ 本地仓库(git commit)→ 远程仓库(git push)
  • git status 查看状态,git diff 查看差异,git log --oneline 查看历史
  • git branch 查看分支,git checkout -b 创建并切换,git merge 合并分支
  • git push 推送,git pull 拉取并合并,git fetch 只拉取不合并
  • git checkout -- file 丢弃工作区修改,git reset HEAD file 移出暂存区
  • git commit --amend 修改最后一次提交,git reset --soft/mixed/hard 回退提交
  • git reflog 查看所有操作历史,用于找回丢失的提交

动手实践

  1. 初始化仓库并提交:

    mkdir git-demo && cd git-demo
    git init
    
    echo "Hello Git" > readme.txt
    git add readme.txt
    git commit -m "Initial commit"
    
    git log --oneline
    
  2. 分支操作:

    git checkout -b feature
    echo "New feature" >> readme.txt
    git add readme.txt
    git commit -m "Add feature"
    
    git checkout main
    git merge feature
    git branch -d feature
    
  3. 撤销练习:

    echo "mistake" > readme.txt
    git checkout -- readme.txt    # 丢弃修改
    cat readme.txt               # 恢复为 "Hello Git"
    
    echo "test" > test.txt
    git add test.txt
    git reset HEAD test.txt      # 移出暂存区
    rm test.txt
    
  4. 查看历史:

    git log --oneline --graph --all
    git reflog
    
  5. 标签练习:

    git tag -a v1.0 -m "Release version 1.0"
    git tag
    git show v1.0
    
  6. 思考:git pull 和 git fetch + git merge 有什么区别?在什么情况下 git pull 会产生冲突?如何解决冲突?

上一页
开发工具链(下):gdb、time
下一页
远程操作:ssh、scp