git常用命令

Git 常用命令速查(工作必备版)

Git 是开发人员必备的分布式版本控制系统,相比集中式版本控制系统,本地即可完成提交、分支、回退等核心操作,仅需在同步时连接远程仓库。本文整理了工作中高频使用的 Git 命令,按功能分类,方便快速查阅。

一、基础初始化与克隆

用于创建本地仓库或克隆远程仓库到本地。

1
2
3
4
5
6
7
8
# 初始化本地仓库(创建主分支)
git init

# 克隆远程仓库(默认拉取主分支)
git clone <远程仓库地址>

# 克隆远程指定分支的代码到本地
git clone -b <分支名> <远程仓库地址>

二、暂存与提交

管理工作区文件的暂存和仓库提交,是日常开发最核心的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 查看工作区/暂存区状态
git status

# 将单个文件加入暂存区
git add <文件名>

# 将多个文件加入暂存区(空格分隔)
git add <文件1> <文件2>

# 将所有修改/新增文件加入暂存区
git add .

# 单个文件分多次提交(交互式选择提交内容)
git add -p <文件名>

# 提交暂存区内容到本地仓库(必填备注信息)
git commit -m "提交备注信息"

# 跳过暂存区,直接提交已追踪文件的修改
git commit -am "提交备注信息" # 等价于 git commit -a -m "备注信息"

# 提交部分文件(如仅提交a、b,暂存c)
# 步骤:1. git add a b → 2. git stash -u -k → 3. git commit -m "备注" → 4. git push → 5. git stash pop(恢复c)
git stash -u -k

# 回撤上一次提交,并将当前工作区修改合并后重新提交
git commit --amend -m "新的提交信息"

提示:提交备注建议遵循 Conventional Commits(commitizen)规范,便于团队协作和日志追溯。

三、远程仓库管理

管理本地与远程仓库的关联、地址配置、分支/标签拉取等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看已关联的远程仓库地址(-v 显示详细信息)
git remote -v

# 添加远程仓库关联(命名为origin)
git remote add origin <远程仓库URL>

# 修改已关联的远程仓库地址
git remote set-url origin <新的远程仓库URL>

# 查看远程仓库所有标签
git ls-remote --tags origin

# 拉取远程指定分支到本地并创建本地分支
git checkout -b <本地分支名> origin/<远程分支名> # 示例:git checkout -b hotfix origin/hotfix

# 清理本地无效的远程分支引用(如远程已删除的分支)
git remote prune origin

# 将本地分支推送到远程并建立关联(解决upstream缺失问题)
git push -u origin <分支名> # 后续可直接用 git push

四、标签管理

用于版本发布标记(如v1.0.0),方便版本回溯。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 列出本地所有标签
git tag

# 删除本地指定标签
git tag -d <标签名>

# 在当前提交上打标签(轻量标签)
git tag <标签名>

# 在当前提交上打标签并添加备注(附注标签,推荐)
git tag <标签名> -m "标签备注信息" # 示例:git tag foo -m "v1.0.0 发布"

# 在指定提交哈希值上打标签并添加备注
git tag <标签名> <提交哈希值> -m "标签备注信息"

# 在当前提交往前数第4个版本上打标签
git tag <标签名> HEAD~4 # 示例:git tag foo HEAD~4

# 推送所有本地标签到远程仓库
git push origin --tags

# 推送指定标签到远程仓库
git push origin <标签名>

# 拉取远程仓库所有标签到本地
git pull --tags

# 删除远程仓库指定标签
git push origin :refs/tags/<远程标签名>

五、分支管理

分支是Git的核心特性,用于并行开发、bug修复等场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 新建本地分支(仅创建,不切换)
git branch <分支名>

# 查看本地所有分支(当前分支前标*)
git branch

# 切换到指定本地分支
git checkout <分支名>

# 创建并切换到新分支(常用)
git checkout -b <分支名>

# 创建远程分支(将本地分支推送到远程)
git push --set-upstream origin <分支名>

# 查看所有分支(本地+远程)及提交哈希/备注
git branch -v
git branch -a # 列出所有分支(本地+远程)
git branch -r # 仅列出远程分支

# 合并指定分支到当前分支(--no-ff 保留分支合并记录)
git merge --no-ff <分支名>

# 删除本地分支(需确保已合并,否则提示)
git branch -d <分支名>

# 强制删除本地分支(无视合并状态,慎用)
git branch -D <分支名>

# 修改本地分支名
git branch -m <旧分支名> <新分支名>

# 强制修改本地分支名(有冲突也会创建,慎用)
git branch -M <旧分支名> <新分支名>

# 更新远程分支索引(同步远程已删除的分支信息)
git fetch

# 还原单个文件到指定提交版本
# 步骤:1. git log <文件路径> 找到目标commitId → 2. 执行以下命令
git checkout <commitId> <文件路径/文件名>

六、变基操作

用于合并多次提交记录,让提交历史更整洁(开发分支常用,避免合并节点混乱)。

1
2
3
# 合并最近3次提交(交互式变基,可编辑提交记录)
git rebase -i HEAD~3
# 注:变基后提交哈希值会改变,本质是重新生成提交记录

七、版本回撤(重置)

用于撤销提交、暂存区/工作区的修改,操作需谨慎!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 回撤最后2次提交(--hard 直接丢弃修改,慎用)
git reset HEAD~2 --hard

# 从仓库回撤文件到暂存区(修正:原git reset --files 为笔误,标准写法如下)
git reset HEAD -- <文件名>

# 回撤暂存区内容到工作区(保留修改)
git reset HEAD

# 回撤提交到暂存区(保留工作区修改,仅撤销提交)
git reset HEAD --soft

# 强制回撤提交并丢弃所有本地修改(高危!)
git reset HEAD --hard

# 回撤仓库最后一次提交(保留工作区修改)
git reset HEAD^

# 回撤到指定提交版本(根据commitId精准回滚)
git reset --hard <commitId>

# 回撤后强制推送到远程分支(需确认无他人协作,高危!)
git push -f -u origin <分支名>

八、强制推送

仅在确认本地版本为最终版本、可覆盖远程时使用(高危!)。

1
git push --force  # 简写:git push -f

九、Git 暂存(stash)

临时保存工作区未提交的修改,切换分支/紧急修复时常用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 将暂存区/工作区修改暂存(堆栈式存储)
git stash

# 查看所有暂存记录
git stash list

# 恢复最近一次暂存内容,并删除该暂存记录
git stash pop

# 恢复最近一次暂存内容,保留暂存记录
git stash apply

# 清空所有暂存记录
git stash clear

十、Vim 模式操作(Git 配置/忽略文件编辑)

编辑.gitignore、git config等文件时常用Vim操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 新建/编辑文件(如.gitignore)
vim <文件名>

# Vim 核心操作
i # 进入插入模式(编辑内容)
esc + :wq # 保存并退出
esc + :q # 直接退出(未修改时)

# .gitignore 规则示例
# # 注释行(#开头)
# .project # 忽略单个文件
# *.obj # 忽略所有.obj后缀文件
# *.exe # 忽略所有.exe后缀文件

# 查看.gitignore中某文件的忽略规则位置
git check-ignore -v <文件名> # 示例:git check-ignore -v .project

十一、配置管理(凭证、别名、CRLF)

优化Git使用体验,减少重复操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看所有Git配置信息
git config --list

# 关闭CR/LF换行符提示(解决git add时的换行警告)
git config --global core.safecrlf false

# 存储用户名密码凭证(输入一次后无需重复验证)
git config --global credential.helper wincred # Windows系统

# 设置命令别名(简化输入)
git config --global alias.ci commit # 示例:git ci 替代 git commit

# 查看Git所有子命令(帮助)
git helper -a

十二、信息查看(日志、差异、文件历史)

12.1 提交日志查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 查看所有提交日志(树形结构,含哈希、日期、提交人、备注)
git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short

# 简洁日志(仅哈希+备注)
git log --oneline

# 查看最近n条提交记录
git log -n <数字> # 示例:git log -5(前5条)
git log --oneline -5 # 简洁版前5条

# 查看单个文件的提交历史
git log <文件名>

# 过滤日志(按备注关键词)
git log --grep <关键词> # 示例:git log --grep "修复bug"

# 查看提交的详细修改内容
git log -p

# 查看最近n条详细提交记录
git log -p -5

12.2 版本差异对比

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 对比工作区与暂存区的差异
git diff

# 对比暂存区与最后一次提交的差异
git diff --cached

# 对比工作区与最后一次提交的差异
git diff HEAD

# 对比两个提交版本的差异(支持commitId/HEAD~n/tag)
git diff <版本1> <版本2> # 示例:git diff HEAD~2 HEAD~1、git diff <tag1> <tag2>

# 对比暂存区与指定标签版本的差异
git diff --cached <tag名>

12.3 提交详情/文件历史

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看最后一次提交的详细修改内容
git show HEAD

# 查看指定提交/标签的详细修改内容
git show <commitId>
git show <tag名>

# 查看倒数第n次提交的详细内容(示例:倒数第二次)
git show HEAD^ # 倒数第二次:HEAD^^ 或 HEAD~2

# 逐行查看文件的修改历史(含提交人、commitId)
git blame <文件名>

# 查看文件指定行范围的修改历史(示例:100-110行)
git blame -L 100,110 <文件名>

十三、文件操作(重命名、移动、删除)

1
2
3
4
5
6
7
8
9
10
11
# 重命名文件并直接加入暂存区(等价于 mv + git add)
git mv <原文件名> <新文件名> # 示例:git mv a b

# 移动文件到指定目录并加入暂存区
git mv <文件名> <目标目录> # 示例:git mv b ./demos/

# 删除已提交的文件(从仓库+工作区删除,加入暂存区)
git rm <文件名>

# 仅从暂存区删除文件(保留工作区文件)
git rm --cached <文件名>

十四、清理工作区

清理未追踪的文件(谨慎使用,避免误删)。

1
2
3
4
5
6
7
8
9
10
11
# 预览要清理的未追踪文件(仅提示,不删除)
git clean -n

# 强制删除未追踪文件
git clean -f

# 强制删除未追踪文件(含.gitignore中忽略的文件,高危!)
git clean -x -f

# 简洁输出git status信息(short branch模式)
git status -sb

总结

  1. Git 命令核心围绕「暂存-提交-远程同步」,日常开发优先掌握 add/commit/pull/push/branch/checkout
  2. 回撤(reset)、强制推送(-f)、清理(clean)为高危操作,执行前务必确认本地修改已备份;
  3. stash 是临时保存工作区的神器,分支切换、紧急修复时高频使用;
  4. 标签(tag)用于版本发布标记,变基(rebase)用于整理提交历史(仅本地/开发分支使用)。

git常用命令
https://cszy.top/20200727-git-0/
作者
csorz
发布于
2020年7月27日
许可协议