Git常用命令

306 阅读7分钟

1. 仓库初始化:git init

作用:将普通目录转换为Git仓库(创建.git隐藏目录)
场景

  • 本地新建项目时初始化
  • 将已有项目纳入Git管理
# 创建新项目目录并初始化
mkdir my-project
cd my-project
git init

# 输出:Initialized empty Git repository in /path/to/my-project/.git/

# 查看隐藏的.git目录(存储所有版本数据)
ls -la .git

2. 克隆仓库:git clone

作用:完整复制远程仓库到本地(包含所有历史记录)
参数

  • --depth 1:浅克隆(只获取最新版本,节省空间)
  • -b <branch>:克隆指定分支
# 克隆GitHub仓库(默认克隆main分支)
git clone https://github.com/user/repo.git

# 克隆特定分支(如dev分支)
git clone -b dev https://github.com/user/repo.git

# 浅克隆大型仓库(仅最近提交)
git clone --depth 1 https://github.com/vuejs/vue.git

3. 状态检查:git status

作用:查看工作区和暂存区文件状态
输出符号说明

  • ??:未跟踪文件
  • A:新添加到暂存区
  • M:已修改文件
  • D:已删除文件
# 基础用法
git status

# 简洁模式(-s参数)
git status -s
# 输出示例:
#  M modified_file.txt  <- 已修改未暂存
# A  new_file.txt       <- 新文件已暂存
# ?? untracked_file.js  <- 未跟踪文件

4. 文件暂存:git add

作用:将文件修改添加到暂存区(准备提交)
高级用法

# 添加所有更改(包括未跟踪文件)
git add .

# 添加特定文件
git add index.html style.css

# 交互式添加(-p参数)
git add -p
# 系统会逐个显示修改块,询问是否暂存
# 输入 y 暂存 / n 跳过 / s 拆分修改块

# 添加所有已跟踪文件的修改(不包括新文件)
git add -u

5. 提交更改:git commit

作用:将暂存区内容永久保存到本地仓库
关键参数

  • -m "消息":直接提交
  • --amend:修改最近一次提交
  • -a:跳过git add步骤(自动暂存所有已跟踪文件的修改)
# 标准提交
git commit -m "修复登录页面样式问题"

# 修改上次提交(追加更改到上次提交)
git add forgotten_file.js
git commit --amend -m "修复登录逻辑和样式"

# 自动提交所有已跟踪文件的修改(跳过add)
git commit -a -m "快速提交所有修改"

6. 提交历史:git log

作用:查看提交历史记录
实用参数组合

# 单行显示(提交ID+信息)
git log --oneline
# 输出:c3f2e9a (HEAD -> main) 更新配置文件

# 图形化显示分支结构
git log --graph --all --decorate

# 查看特定文件的修改历史
git log -p README.md

# 按作者筛选
git log --author="John"

# 按时间筛选(最近2周)
git log --since="2 weeks ago"

7. 版本回退:git reset

作用:撤销提交到指定状态(三种模式)

模式影响范围使用场景
--soft仅移动HEAD指针重新组织提交
--mixed重置暂存区(默认)撤销add操作
--hard重置工作区彻底丢弃修改
# 查看提交ID
git log --oneline
# 输出:a1b2c3d 添加新功能

# 软重置(保留修改在暂存区)
git reset --soft a1b2c3d

# 混合重置(保留修改在工作区)
git reset --mixed a1b2c3d

# 硬重置(彻底丢弃所有修改)
git reset --hard a1b2c3d

⚠️ 警告:--hard 会永久删除未提交的修改!慎用!


8. 操作日志:git reflog

作用:记录所有HEAD指针移动历史(找回误操作的关键)
场景

  • 找回被 reset --hard 删除的提交
  • 恢复误删的分支
# 查看所有操作记录
git reflog
# 输出示例:
# a1b2c3d (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1
# d4e5f6a HEAD@{1}: commit: 添加重要功能

# 恢复到误删前的状态
git reset --hard HEAD@{1}

9. 分支操作:git branch & git checkout

核心命令

# 查看所有分支(*表示当前分支)
git branch -v

# 创建新分支
git branch feature-payment

# 切换分支
git checkout feature-payment

# 创建并切换分支(组合命令)
git checkout -b hotfix

# 删除已合并分支
git branch -d feature-old

# 强制删除未合并分支
git branch -D experimental

10. 临时存储:git stash

作用:临时保存工作区未提交的修改
使用场景

  • 紧急修复其他分支的bug
  • 切换分支前保存当前进度
# 存储当前修改(默认存储)
git stash

# 存储时添加描述
git stash save "正在开发购物车功能"

# 查看存储列表
git stash list
# 输出:stash@{0}: On main: 正在开发购物车功能

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

# 恢复指定存储(如stash@{1})
git stash apply stash@{1}

# 恢复并删除存储
git stash pop

11. 远程操作:git remote

作用:管理远程仓库连接

# 添加远程仓库(通常命名为origin)
git remote add origin https://github.com/user/repo.git

# 查看远程仓库详情
git remote -v
# 输出:
# origin  https://github.com/user/repo.git (fetch)
# origin  https://github.com/user/repo.git (push)

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

# 移除无效远程连接
git remote remove upstream

12. 推送更新:git push

作用:将本地提交推送到远程仓库
常见用法

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

# 后续推送(简化命令)
git push

# 强制推送(覆盖远程历史,慎用!)
git push -f

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

# 推送标签
git push --tags

13. 获取更新:git fetch & git pull

区别

命令行为安全等级
git fetch仅下载远程更新★★★★★
git pull下载+自动合并★★★☆☆
# 安全做法:先fetch再手动合并
git fetch origin        # 下载更新
git diff origin/main    # 查看差异
git merge origin/main   # 合并到当前分支

# 快速更新(等价于fetch+merge)
git pull origin main

# 使用rebase避免多余合并记录
git pull --rebase origin main

14. 分支合并:git merge

作用:将指定分支合并到当前分支
合并策略

# 普通合并(创建合并提交)
git checkout main
git merge feature-login

# 快进合并(当分支线性时)
git merge --ff-only feature

# 禁止快进(强制创建合并提交)
git merge --no-ff feature

# 遇到冲突时终止合并
git merge --abort

15. 精选提交:git cherry-pick

作用:复制特定提交到当前分支
场景

  • 将修复补丁应用到多个分支
  • 移植特定功能提交
# 查看提交ID
git log --oneline --all

# 复制指定提交(如a1b2c3d)
git cherry-pick a1b2c3d

# 复制多个连续提交
git cherry-pick commitA..commitC  # 不包含commitA

# 复制包含合并提交
git cherry-pick -m 1 mergeCommit

16. 版本标签:git tag

作用:标记重要版本(如发布版本)

# 创建轻量标签
git tag v1.0.0

# 创建含注释的标签
git tag -a v1.1.0 -m "正式发布稳定版"

# 查看所有标签
git tag -l

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

# 删除本地标签
git tag -d v0.9

17. 重写历史:git rebase

作用:重新应用提交(保持历史线性)
黄金法则:仅对尚未推送的提交使用rebase!

# 将当前分支变基到main分支
git checkout feature
git rebase main

# 交互式变基(修改最近3次提交)
git rebase -i HEAD~3
# 操作选项:
# p, pick = 使用提交
# r, reword = 修改提交信息
# s, squash = 合并到前一个提交
# d, drop = 删除提交

命令总结表

类别命令关键用途危险等级
基础操作init clone创建/获取仓库★☆☆☆☆
日常工作流status add commit提交代码★☆☆☆☆
历史管理log reflog查看历史/找回操作★★☆☆☆
撤销操作reset版本回退★★★★☆
分支管理branch checkout多分支开发★★☆☆☆
临时存储stash保存工作现场★☆☆☆☆
远程协作remote push fetch pull团队协作★★★☆☆
代码整合merge rebase cherry-pick合并代码★★★★☆
版本标记tag发布管理★☆☆☆☆

💡 最佳实践建议

  1. 提交前用 git diff --cached 检查暂存区内容
  2. 使用 git pull --rebase 代替普通 pull 保持历史整洁
  3. 频繁使用 git stash 管理未完成的工作
  4. 重要操作前用 git branch backup 创建备份分支