鲁ICP备2024118681号
Collect from网页模板
Modified by 博客

Git 常用命令速查手册

Git 原理:一句话 + 三个核心概念

Git 是一个基于“快照”和“链式哈希”的分布式版本控制系统。

它不记录文件的“差异”,而是每次保存项目的一个完整快照,并通过加密哈希(SHA-1)将这些快照链接成一条历史链条。


一、核心思想:快照(Snapshot),不是差异(Diff)

大多数版本控制系统(如 SVN)记录的是文件的修改差异(即“从 A 到 B 改了哪几行”)。

Git 记录的是每一个时间点上项目的完整快照

  • 每次你执行 git commit,Git 就会把当前项目的状态“拍一张照片”存下来。
  • 如果文件没变,Git 不会重复存储,而是只保存一个指向已有文件的指针,节省空间。

✅ 优点:速度快、完整性高、易于恢复任意版本。


二、数据存储:一切基于 SHA-1 哈希

Git 内部使用 SHA-1 哈希算法为每个数据块生成唯一的 40 位字符串 ID(如 a1b2c3d...)。

Git 存储的三种基本对象:

类型 作用 示例
Blob(二进制大对象) 存储文件内容(不包括文件名) 一个 .txt 文件的内容
Tree 存储目录结构,指向 Blob 或其他 Tree 类似文件夹,记录文件名和权限
Commit 代表一次提交,包含:作者、时间、日志、指向一个 Tree、指向前一个 Commit 构成历史链条的节点

提交历史就像一条“链子”:

[Commit 3] → 指向 Tree C → 包含 Blob X, Y, Z  
   ↑ (parent)  
[Commit 2] → 指向 Tree B → 包含 Blob X, Y  
   ↑  
[Commit 1] → 指向 Tree A → 包含 Blob X
  • 每个 commit 都有一个唯一的哈希值。
  • 它指向一个 tree(项目根目录结构),而 tree 又指向多个 blob(文件内容)。
  • 同时,commit 还记录了它的“父提交”(parent),从而形成一条可追溯的历史链。

三、三大区域:你操作的是哪个“区”?

Git 将项目管理分为三个区域:

区域 说明 对应命令
工作区(Working Directory) 你正在编辑的文件(磁盘上的实际文件) edit file.txt
暂存区(Staging Area / Index) 你准备提交的“待打包”文件列表 git add
版本库(Repository) 已提交的快照历史(.git 目录中) git commit

👉 流程:
工作区修改 → git add → 暂存区 → git commit → 版本库


四、分支的本质:指针!

在 Git 中,分支其实就是指向某个 commit 的指针

  • 默认分支叫 mastermain,它指向最新的 commit。
  • 当你创建新分支:git branch dev,Git 只是新建一个叫 dev 的指针,指向当前 commit。
  • 切换分支:git checkout dev,HEAD 指针指向 dev
  • 提交新 commit 时,该分支的指针自动前移。

✅ 所以:分支创建极快,几乎没有成本,这是 Git 鼓励多分支开发的原因。


Git 原理一句话

Git 是一个用 SHA-1 哈希组织“快照”的分布式系统,通过 blob、tree、commit 三种对象构建历史,用指针实现轻量分支,所有数据本地存储,确保高效、安全、可追溯。


📌 类比理解

想象你在写一本小说,Git 就是你每写完一章就拍照存档,每张照片编号唯一,且注明“上一章是哪张”。你可以随时回到任意一章,还能分出“爱情线”“悬疑线”多个剧情分支——而这一切都存在你自己的电脑里。


二、本地操作:添加、提交、查看状态

1. 文件追踪与提交

git add file.txt                    # 添加单个文件到暂存区
git add file1.txt file2.txt         # 添加多个文件
git add .                           # 添加当前目录所有修改(常用)
git add -u                          # 只添加已 tracked 的修改文件(不包括新增文件)

git commit -m "描述信息"            # 提交暂存区内容
git commit --amend                  # 修改最后一次提交(合并或修改 commit message)

2. 查看状态与差异

git status                          # 查看工作区和暂存区状态
git diff                            # 查看工作区 vs 暂存区的差异
git diff --staged                   # 查看暂存区 vs 最近一次 commit 的差异
git diff HEAD                       # 查看工作区 vs 最新 commit 的全部差异

3. 版本回退与历史查看

git log                             # 查看提交历史
git log --oneline                   # 简洁显示:hash + 提交信息
git log --graph                     # 显示分支合并图
git log -p -2                       # 显示最近两次提交的具体修改内容
git reflog                          # 查看本地操作历史(含 reset 记录,重要!)

git reset --hard HEAD~1             # 回退到上一个版本,丢弃所有更改
git reset --hard <commit-id>        # 回退到指定 commit(彻底删除后续历史)
git reset --soft HEAD~1             # 回退但保留修改在暂存区(用于重新提交)

⚠️ reset --hard 是危险操作,请确认后再执行!


三、工作区恢复策略(三种场景)

场景 操作
仅工作区修改,未 add git checkout -- <file>git restore <file>(Git 2.23+)
已 add 到暂存区 git reset HEAD <file>,再 git checkout -- <file>
已 commit,想撤销 git reset --soft HEAD~1(保留修改)或 git revert <commit>(安全反向提交)

📌 git rm <file>:从版本库删除文件。若误删,可用 git checkout HEAD -- <file> 恢复。


四、远程仓库操作(Online)

1. 配置 SSH 密钥(推荐)

ssh-keygen -t rsa -C "your_email@example.com"
# 生成密钥对:id_rsa(私钥)、id_rsa.pub(公钥)

~/.ssh/id_rsa.pub 内容复制到 GitHub/GitLab 的 SSH Keys 设置中。

2. 关联远程仓库

git remote add origin git@server:path/repo.git   # 关联远程仓库
git remote -v                                   # 查看远程仓库信息

3. 克隆与推送

git clone git@server:path/repo.git              # 克隆远程仓库到本地
git push -u origin master                       # 第一次推送并设置上游分支
git push origin main                            # 后续推送(注意分支名可能是 main)
git push                                        # 已关联后可简写

🔁 分布式优势:本地提交无需联网,网络恢复后 git push 即可同步。


五、分支管理(核心功能)

1. 分支操作

git branch                            # 查看本地分支
git branch -a                         # 查看本地 + 远程分支
git branch -v                         # 显示最新提交信息
git branch <name>                     # 创建分支
git branch -d <name>                  # 删除分支(-D 强制删除)
git checkout <name>                   # 切换分支
git checkout -b <name>                # 创建并切换分支(常用)

2. 合并与冲突处理

git merge <branch>                    # 将指定分支合并到当前分支
# 若有冲突,手动编辑文件 → git add → git commit 完成合并
git log --graph --oneline             # 查看分支合并图

合并策略建议:

  • git merge --no-ff <branch>:禁用快进合并,保留合并历史(推荐团队使用)
  • 默认 fast-forward 合并会丢失分支痕迹

3. 团队协作分支

git checkout -b dev origin/dev        # 创建本地分支并跟踪远程分支
git branch --set-upstream-to=origin/dev dev  # 设置上游分支
git pull                              # 拉取远程更新(等价于 fetch + merge)
git fetch --all                       # 获取所有远程分支最新信息

💡 git pull 可能自动合并导致冲突,建议先 fetch 再手动 merge


六、临时保存:Stash(储藏区)

当你需要切换分支但不想提交半成品时:

git stash                             # 保存当前修改到栈中
git stash list                        # 查看所有储藏
git stash pop                         # 恢复最近一次 stash 并从栈中删除
git stash apply                       # 恢复但不清除 stash
git stash drop                        # 删除最近一次 stash
git stash clear                       # 清空所有 stash

七、标签管理(Tag)

用于标记发布版本(如 v1.0.0)

git tag v1.0                          # 给当前 commit 打标签
git tag v0.9 <commit-id>              # 给指定 commit 打标签
git tag -a v1.0 -m "Release 1.0"      # 带注释的标签
git tag -s v1.0 -m "Signed release"   # 使用 GPG 签名标签(需配置)

git tag                               # 查看所有标签
git show v1.0                         # 查看标签详情

# 推送标签
git push origin v1.0                  # 推送单个标签
git push origin --tags                # 推送所有本地标签

# 删除标签
git tag -d v1.0                       # 删除本地标签
git push origin :refs/tags/v1.0       # 删除远程标签

八、效率提升:别名配置(Alias)

Linux Shell 别名(推荐添加到 .bashrc.zshrc

# Git 快捷方式
alias gta='git add .'
alias gts='git status'
alias gtc='git commit -m'
alias gpl='git pull'
alias gps='git push'

# Docker 示例
alias dkb='docker build'
alias dki='docker images'
alias dkr='docker run'
alias dkp='docker ps'

# ls 彩色输出
alias ll='ls -alF'
alias la='ls -al --color=auto'
alias grep='grep --color=auto'

✅ 加载方式:source ~/.bashrc


九、紧急恢复技巧(慎用)

# 强制重置本地分支为远程状态(丢弃所有本地更改)
git fetch origin
git reset --hard origin/master

# 撤销已 push 的提交(谨慎!影响他人)
git revert <commit-id>                # 推荐:生成反向提交,安全
git reset --hard HEAD~1 && git push -f  # 不推荐:强制覆盖远程历史

强制推送(-f)会覆盖他人工作,请仅在个人分支或明确协调后使用!


总结口诀(便于记忆)

本地操作:add → commit → status → log
分支管理:checkout -b → merge → push
远程同步:clone → pull → push
紧急情况:reflog → reset → stash
团队协作:--no-ff → pull → review


📌 学习建议路径: 1. 先掌握 add, commit, status, log 2. 理解 工作区 / 暂存区 / 版本库 三层结构 3. 熟练使用分支与合并 4. 掌握远程协作流程 5. 最后学习高级功能(stash, tag, rebase)


发表评论

评论列表,共 0 条评论

    暂无评论