【Git 常用命令速查表(按功能分类)】

Git 常用的基础命令(速查表)

  • 常用的基础命令
    • [1. 配置信息:git config](#1. 配置信息:git config)
    • [2. 把 Git 绑定到 Github/Gitee:ssh、ssh-keygen、ssh-add、mkdir](#2. 把 Git 绑定到 Github/Gitee:ssh、ssh-keygen、ssh-add、mkdir)
    • [3. 把项目上传到 Github/Gitee 备份:pwd、cd、ls、dir、git init、git add、git commit、git remote、git push](#3. 把项目上传到 Github/Gitee 备份:pwd、cd、ls、dir、git init、git add、git commit、git remote、git push)
    • [4. 添加忽略文件: .gitignore 文件 ,touch 、git rm](#4. 添加忽略文件: .gitignore 文件 ,touch 、git rm)
    • [5. Git 基础操作:git help、git add、git commit、git diff、git mv、git log](#5. Git 基础操作:git help、git add、git commit、git diff、git mv、git log)
    • [6. 版本回退、回退后的恢复:git reset、git reflog、git fsck、git show](#6. 版本回退、回退后的恢复:git reset、git reflog、git fsck、git show)
    • [7. 撤销"已推送的提交"(保留提交历史): git revert](#7. 撤销“已推送的提交”(保留提交历史): git revert)
    • [8. 取消暂存(丢弃暂存区的修改)⇒ 重置暂存区、保留工作区修改 :git reset 、git restore](#8. 取消暂存(丢弃暂存区的修改)⇒ 重置暂存区、保留工作区修改 :git reset 、git restore)
    • [9. 恢复文件(丢弃工作区更改):重置工作区 为指定版本 → 从某个分支/ 提交/ 暂存区 恢复文件 到工作区(cat、git show、git diff、git stash、git checkout、git restore)](#9. 恢复文件(丢弃工作区更改):重置工作区 为指定版本 → 从某个分支/ 提交/ 暂存区 恢复文件 到工作区(cat、git show、git diff、git stash、git checkout、git restore))
    • [10. 删除文件:手动删除 = rm <文件路径>、从 暂存区删除 git rm --cached <文件路径>](#10. 删除文件:手动删除 = rm <文件路径>、从 暂存区删除 git rm --cached <文件路径>)
    • [11. 标签 tag:标记重要提交、常用于标记 "发布的版本号" → git tag](#11. 标签 tag:标记重要提交、常用于标记 “发布的版本号” → git tag)
    • [12. 查找时 指定"搜索范围":grep (可用正则表达式 指定格式)](#12. 查找时 指定“搜索范围”:grep (可用正则表达式 指定格式))
    • [13. 远程仓库:git remote](#13. 远程仓库:git remote)
    • [14. 同步远程仓库的更新、并推送本地 Git 仓库: git fetch、git diff、git merge、git pull、git push](#14. 同步远程仓库的更新、并推送本地 Git 仓库: git fetch、git diff、git merge、git pull、git push)
    • [15. Git 查看对象:git cat-file、git ls-files 、git count-objects、git rev-list 、git shortlog](#15. Git 查看对象:git cat-file、git ls-files 、git count-objects、git rev-list 、git shortlog)
    • [16. Git 分支:git branch、git checkout、git switch、git merge](#16. Git 分支:git branch、git checkout、git switch、git merge)
    • [17. 保存 分支"未提交的更改":git stash](#17. 保存 分支“未提交的更改”:git stash)
    • [18. 应用 指定提交里的 "新更改": git cherry-pick](#18. 应用 指定提交里的 “新更改”: git cherry-pick)
    • [19. 推送本地新分支到 远程仓库、克隆远程仓库、基于远程分支 创建对应的本地分支:git branch、git push、git clone、git checkout、git switch](#19. 推送本地新分支到 远程仓库、克隆远程仓库、基于远程分支 创建对应的本地分支:git branch、git push、git clone、git checkout、git switch)
    • [20. 变基:以"指定目标分支的最新提交"为基点(祖先),重写分支的"提交历史" :git rebase(只对"未推送的本地提交"使用变基)](#20. 变基:以“指定目标分支的最新提交”为基点(祖先),重写分支的“提交历史” :git rebase(只对“未推送的本地提交”使用变基))
    • [♣ 结束语 和 友情链接](#♣ 结束语 和 友情链接)

  • 快速搜索 :涉及知识点比较多,看过之后忘了很正常,想查询时,请按 Ctrl+F 快速搜索关键字哦 (* ̄︶ ̄)。
    • 搜索后,多次按下 enter 键 或 点击搜索框后的 上下箭头,就能在关键词之间快速跳转。

常用的基础命令

1. 配置信息:git config

用途 命令
查看 所有配置信息(=配置信息列表) git config --list
查看 配置信息列表(显示 所在的配置文件) git config --list --show-origin
查看 指定项的配置信息 git config 配置项名字
设置 指定项的配置信息 git config <选项> <配置项名字> "配置项的值" 选项 : ❶ --system 系统级:所有用户、所有仓库 生效。 ❷ --global 全局配置:对当前用户的所有仓库生效。 ❸ --local 仓库级:对当前仓库 生效。 : 配置 当前用户 的 用户名、邮箱: git config --global user.name "自己的用户名" git config --global user.email "自己的邮箱"
查看 Git Bash 的本地语言设置 locale
关闭 路径名的中文转义 (无法正常显示中文时) git config --global core.quotepath false
把默认编辑器 配置为 Git Bash 自带的 vim 编辑器 :先配置为自己的常用编辑器,如果无法正常打开文件时, 可配置为自带的 vim 编辑器,常用于 编辑提交说明信息。 git config --global core.editor "vim"
配置 命令的别名(简写) (熟悉各类命令后,可配置简写、使用简写) git config --global alias.简化名 原命令git config --global alias.简化名 '带空格的原命令' :原命令是 组合命令,带空格时,用单引号 或 双引号括起来。 git config --global alias.st statusgit config --global alias.unstage 'reset HEAD' git config --global alias.lgog "log --oneline --graph"

2. 把 Git 绑定到 Github/Gitee:ssh、ssh-keygen、ssh-add、mkdir

用途 命令
检查本地是否安装了 SSH (一般系统会自带) sshssh -V(大写V,显示版本信息)
生成 密钥 SSH key ❶ 不带注释: ssh-keygen -t rsa ssh-keygen:SSH 密钥生成工具 。 -t rsa:指定密钥类型为 RSA 算法。 ❷ 指定邮箱为"注释": ssh-keygen -t rsa -C "自己的邮箱"-C: 注释。用于 识别密钥的"用途或所有者" ,不影响密钥本身的安全性。
创建 .ssh 文件夹,确保 SSH 配置目录存在 mkdir -p "/c/Users/张三/.ssh" mkdir (make directory):"创建目录"。 -p: parents ,父目录。 自动创建不存在的父目录,如果目录已存在,也不会报错,能正常执行。
生成密钥 + 手动指定 密钥文件保存路径 (路径里有中文被转义时使用) ssh-keygen -t rsa -f "/c/Users/张三/.ssh/id_rsa" -C "your_email@example.com" -f (filename):指定输出密钥文件的 路径和名称 。 如果不使用 -f 参数,ssh-keygen 会使用默认位置和名称。
验证 是否和 Github 关联成功了 ssh -T git@github.com -T= Terminal(终端) 可确保不会分配终端 ,只要最简单的命令执行 通道。 Git 服务只需要验证密钥 ,不需要给我们一个 shell 终端。 成功时会显示欢迎信息,但不会获得 shell 访问权限。
验证 是否和 Github 关联成功了 + 直接强制指定 known_hosts 文件的存放路径 (路径里有中文被转义时使用) ssh -T git@github.com -o "UserKnownHostsFile=/c/Users/自己的用户名/.ssh/known_hosts"
查看 ssh-agent 中是否有私钥 (列出当前 SSH 代理中已加载的私钥) ssh-add -l
启动 ssh-agent 并设置环境变量 eval "$(ssh-agent -s)"
把私钥添加到 ssh-agent ssh-add "/c/Users/计算机用户名/.ssh/id_rsa"
显示当前所在的目录(文件夹)的完整路径 pwd pwd = 打印工作目录( Print Working Directory)。

3. 把项目上传到 Github/Gitee 备份:pwd、cd、ls、dir、git init、git add、git commit、git remote、git push

用途 命令
查看 当前目录 pwd,确定当前的位置。
切换 当前工作目录 cd = Change Directory。 (更改目录/切换目录) 进入 指定文件夹: cd 文件夹路径,如 cd /f/Git-test返回 上一级目录cd ..
初始化一个 Git 仓库 (在项目"根目录"执行 ) git init
添加文件到暂存区 git add
暂存文件 常用的两种方式 ❶ 暂存所有文件: git add . ❷ 暂存指定文件:git add <文件路径>
查看 仓库当前状态 git status
把暂存区内容 提交到"本地 Git 仓库" git commit -m "提交说明"
添加(关联) "远程仓库" git remote add <远程仓库别名/可自定义> <github上的 Git 仓库地址>
查看 远程仓库的信息 git remote -v
推送本地分支 到远程仓库 切换到要推送的本地分支上(默认推送到到远程同名分支)git push <远程仓库别名> <本地分支名>。 ❷ 推送到远程,并建立跟踪关系(-u 参数)git push -u <远程仓库别名> <本地分支名>-u--set-upstream:建立本地分支与远程仓库分支跟踪关系 。 如果第一次推送加 -u,之后可以在分支上直接 git push ,不用指定远程仓库。 git push -u origin maingit push origin main在其他分支上,指定推送的本地分支和远程分支git push <远程仓库别名> <本地分支>:<远程分支>
查看 "提交的历史记录" git log 简洁的提交历史记录git log --oneline 带上一行--oneline 选项。
查看 当前目录里的文件列表 lsdir

4. 添加忽略文件: .gitignore 文件 ,touch 、git rm

用途 命令
创建 一个空文件(文件不存在时) 如果文件已存在:更新文件的访问和修改时间。 touch <文件名(可带扩展名)>
如果当前根目录下没有.gitignore 文件, 则在当前目录下 创建一个名为 .gitignore 的空文件。 创建后,手动修改文件内容,添加需要被忽略的文件。 touch .ignore
查看 仓库当前状态 git status
查看仓库状态 和 忽略文件 git status --ignored
从 Git 暂存区中移除 。 ⇒ 停止跟踪文件,但保留在本地工作区 git rm -r --cached <文件路径> : 将.idea从 Git 的暂存区/索引中 删除,但保留本地工作区文件。: git rm -r --cached .idea 。 ⚠️ 高危 :命令中缺少--cached参数会导致本地文件也被删除 ,一定要加上。 -r递归 标志,表示如果 .idea 是一个目录,会递归删除"目录下的所有内容"

5. Git 基础操作:git help、git add、git commit、git diff、git mv、git log

用途 命令
需要 某个命令的一个快速参考表(常用) git 命令 -h ,如 git add -h-h :就是 help的缩写。
查看 当前仓库状态 git status
暂存文件 常用的两种方式 ❶ 暂存所有文件: git add . ❷ 暂存指定文件:git add <文件路径>
查看 暂存区的文件列表 git ls-files --stagels-files:列出文件(list files),显示当前暂存区中所有文件的信息。
查看 A、B 的差异 git diff A B 比较的是 从 A 到 B 的变化 ,即 "在 A 的基础上,需要做什么更改才能得到 B "。 输出信息绿色字B 中新更改的内容红色字B 中没有的内容 。 ❶ 查看 暂存区内容、工作区内容的差异git diff (默认:对比暂存区和工作区)。 ❷ 查看 指定文件的内容 在工作区、暂存区的区别git diff <文件路径> (丢弃工作区更改前,查看工作区的更改) ❸ 查看暂存区内容 与最新提交的区别git diff --staged = git diff --staged HEAD = git diff --cached HEAD--staged--cached 同一个意思。 ❹ 查看 指定两个提交的差异git diff <提交哈希值1> <提交哈希值2>查看 当前提交与上一个提交的差异git diff HEAD~1 HEAD
提交 暂存区所有文件 git commit -m "提交说明"
绕过暂存区、提交指定文件 git commit <文件路径> -m "提交说明"
用新提交 修订(替换) 旧提交 :只能修改本地提交,已推送的公共提交 不要这样随意修改, 会丢失公共提交历史,影响他人。 git commit --amend -m "提交说明"
已跟踪文件 重命名 git mv <旧名文件的路径> <新名文件的路径>git mv oldfile.txt newfile.txt 只需要一个命令,就等效于三个命令 的组合: 重命名 mv oldfile.txt newfile.txt + 删原名索引 git rm oldfile.txt + 添加新名文件到暂存区 git add newfile.txt
已跟踪文件 移动到新位置 (把文件移动到新文件夹 git mv <文件的路径> <新文件夹的路径/> :文件夹名后面的 / 千万不能漏掉 !否则就不是移动到文件夹,而是重命名了
查看 提交历史 完整提交历史git log(详情版:有提交的id、说明、作者、邮箱、时间); ❷ 一行的 简洁版提交历史 :git log --oneline (简洁版:提交 id 、提交说明); 带指定数目 git log --oneline -n(n 是数目),最近 n 条提交历史 。 ❸ 显示 每次提交 的更改内容 (按 补丁 的格式输出): git log -p -n = git log --patch -n (n是数目),最近 n 条提交历史 。 ❹ 查看 每次提交的简略统计信息git log --stat。 ❺ 图形化显示提交历史git log --graphgit log --graph --oneline。 ❻ 查看 合并提交的历史git log --oneline --merges查看 远程仓库 指定分支的最新提交历史(获取fetch新数据后)git log <远程仓库名>/<远程分支名> --oneline git log github/main --oneline ; ❽ 查看 指定文件的提交历史 git log --oneline <文件路径> git log --oneline README.md

6. 版本回退、回退后的恢复:git reset、git reflog、git fsck、git show

用途 命令
查看 仓库的当前状态 git status
查看 提交的历史记录、HEAD 指向 git log --oneline(简洁版:提交 id 、提交说明); git log(详情版:有提交的id、说明、作者、邮箱、时间)。
把文件添加到"暂存区" 添加指定文件:git add <文件路径> ; 添加全部文件:git add .
提交文件 把暂存区文件全部提交: git commit -m "提交说明"绕过暂存区,直接 指定提交文件 (不提交暂存区其他文件): git commit <文件路径> - m "提交说明"
移动 HEAD 指针,保留暂存区、工作区 。 撤销提交,但暂存区不变、工作区不变。 最后一次提交内容 : 暂存区 待提交。 使用场景:撤销提交,所有修改放入暂存区,重新提交。 git reset --soft HEAD^ 提交 id 替代 HEAD,回退到"指定提交"git reset --soft commit_id
移动 HEAD 指针,重置暂存区,保留工作区更改重置 :文件内容 = 和指定提交中的文件内容一模一样。 重置暂存区:暂存区被重置到指定提交的状态 , ⇒ 暂存区文件内容 = 和 指定提交中 一样 。 相当于 间接丢弃了暂存区的新修改内容,但不影响工作区的修改。 使用场景:默认模式,暂存区改变为指定状态,工作区内容不变。 git reset --mixed HEAD^ = git reset HEAD~1--mixed 可省略,git reset默认模式) 取消暂存的特定文件git reset HEAD file.txt = git reset file.txt (默认是 --mixed HEAD)。
移动 HEAD 指针,重置"暂存区、工作区的修改"重置 :文件内容 = 和指定提交中的文件内容一模一样。 暂存区、工作区的文件内容 都要和指定提交里保存的一模一样。 不一样的呢?直接删除。 ⚠️ 已跟踪文件的 暂存区的修改、工作区里的修改 都会被清除。 使用场景彻底回退 ,直接从本地删除所有修改 (包括:未提交的暂存内容 )。 --hard永久删除"未提交的更改",无法恢复 (除非有 stash储藏过); ⚠️ 对已推送到远程仓库的提交 使用 reset 后, 会改变"公共提交历史" , 需要强制推送 (git push -f) 覆盖远程仓库, 这会影响其他协作者,应该避免。 个人项目则无所谓,随自己心意。 git reset --hard HEAD^
查看 所有操作的历史记录HEAD 指针的移动记录) git reflog 恢复到 reset 之前的状态:git reset --hard HEAD@{n} HEAD@{n}:重置操作之前的那个提交,找到想恢复的提交。
查找"孤立对象"并保存 git fsck --lost-foundfsck = 文件系统检查,File System Check。 --lost-found :将被孤立(dangling美/ˈdæŋɡlɪŋ/,悬挂,悬空的)的对象(提交、blob、tree)保存到 .git/lost-found 目录。
查看 孤立提交的详细信息 git show <提交哈希值>
查看 blob 对象里是什么文件内容 git show <blob 哈希值>
查看 blob 文件内容时 手动保存到指定文件中 (新文件,会新建一个文件 ) git show blob哈希值 > 文件名(带扩展名) > :保存到指定文件。

7. 撤销"已推送的提交"(保留提交历史): git revert

用途 命令
撤销 指定提交的更改 (同时保留历史记录,生成一个新的"反向提交") git revert <提交哈希值>
撤销 最近一次提交的更改 git revert HEAD HEAD: 当前分支指向的提交。
撤销 多个提交的更改(按范围) git revert <commit1>..<commit2> 左开右闭,左边的开始提交 不包含在内 ,如果要包含左边的在内,使用 ^..(开始位置)。 : 撤销从提交 A 到提交 D 之间的所有提交(不包括 A,包括 D): git revert A-hash..D-hash
撤销 多个指定提交 git revert <提交哈希值1> <提交哈希值2> <提交哈希值3>
撤销 指定提交 但不自动提交(可修改信息) git revert -n <提交哈希值> -n = --no-commit,不自动提交。
查看 合并提交历史 git log --oneline --merges
撤销 合并提交 git revert -m <父分支数字> <合并提交哈希值> 指定保留的父分支-m= --mainline。 ❶ -m 1 :保留主分支的更改 (第一个父分支)= 被合并到的分支 ,如 main ,撤销另一个分支的更改; ❷ -m 2 :保留第二个父分支 = 被合并的分支 ,如 dev
继续之前中断的 revert (有冲突时,解决冲突后) git revert --continue
取消 revert 操作,回到开始前的状态 git revert --abort
跳过当前提交(不撤销它) 并继续 git revert --skip

8. 取消暂存(丢弃暂存区的修改)⇒ 重置暂存区、保留工作区修改 :git reset 、git restore

用途 命令
重置暂存区,保留工作区的内容 重置暂存区 = 取消暂存 = 暂存区里不一样的更改 被丢弃 : ❶ 重置暂存区 :暂存区内容 = 指定提交的内容。 ❷ 保留工作区:工作区的内容不变。 ✔️ git reset <文件路径> = git reset HEAD <文件路径> = git reset --mixed HEAD <文件路径> git reset 默认是 --mixed HEAD,可省略。
重置暂存区的更改(到当前提交),保留工作区更改 ✔️ git restore -S <文件路径> = git restore --staged <文件路径> git restore --staged <file> = 替代 git reset HEAD <file> --staged:操作暂存区。 --worktree:操作工作区。 --source:指定恢复的源(默认为 HEAD,指向 最新提交) 重置暂存区、工作区 两个区域的更改 都被丢弃: git restore --staged --worktree <file> = git reset --hard <文件路径> 恢复文件到某个提交的版本git restore --source=<提交哈希值> <文件路径> git restore --source=ac1b23e README.md

9. 恢复文件(丢弃工作区更改):重置工作区 为指定版本 → 从某个分支/ 提交/ 暂存区 恢复文件 到工作区(cat、git show、git diff、git stash、git checkout、git restore)

用途 命令
查看文件内容 cat <文件路径>
查看 提交历史记录 git log --oneline (一行版;提交哈希值、提交说明)
查看 指定提交的 指定文件内容 git show <提交哈希值>:<文件路径>
查看 某次提交的详细信息(差异) 查看 单个对象详情 ,显示完整信息和差异git show = git log 的详细提交信息 + git diff 的变更内容。 git show <提交哈希值>
查看 当前的最新提交内容(含 差异) git show HEAD
查看 指定两个提交的差异 git diff <旧哈希> <新哈希>
查看 指定文件的内容 在工作区、暂存区的区别 (丢弃工作区更改前,查看工作区的更改) git diff <文件路径>
保存未提交的更改 (丢弃工作区更改前,备份工作区的更改) git stash
重置工作区:丢弃工作区的更改,从某个分支 "恢复文件" ; 注:这个操作有危险性,未提交的更改 会被永久丢弃且无法恢复。 首先,要确定某个文件的当前更改 全部不要了,其次才能用。 工作区文件内容 = 指定分支的最新提交版本git checkout 分支名 -- <文件路径>
重置工作区:丢弃工作区的更改, 从某个提交 "恢复文件"作用: 恢复到"任意历史版本。 注:从提交历史恢复的文件 会被默认添加到"暂存区"" 。 注:这个操作有危险性,未提交的更改 会被永久丢弃且无法恢复。 工作区文件内容 = 指定提交里的内容git checkout 提交哈希值 -- <文件路径>(优先级:暂存区>最新提交)
重置工作区:丢弃工作区的更改,从最新提交、暂存区 恢复指定文件的内容 : 将指定文件 恢复到最近一次 提交( git commit) 或 暂存 (git add) 时的状态。 作用:丢弃当前工作区的更改(未暂存的更改) 。 注:这个操作有危险性,未提交的更改 会被永久丢弃且无法恢复。 工作区文件内容 = 暂存区内容 或 最新提交里的内容git checkout -- <文件路径>
重置工作区:丢弃工作区的更改, 从"最新暂存 或 最新提交" 恢复指定文件的内容 。 注:这个操作有危险性,未提交的更改 会被永久丢弃且无法恢复。 工作区文件内容 = 暂存区内容 或 最新提交里的内容git restore <文件路径> = git checkout -- <文件路径> (优先级:暂存区>最新提交) 工作区的新更改不要了,工作区恢复到哪个版本? 暂存区有内容,就恢复到暂存区一样。 暂存区没有内容,就恢复到和最新提交一样。 git restore <文件路径> = git restore -W <文件路径>(简写的显式指定) = git restore --worktree <文件路径> (完整的显式指定) git restore 的默认选项W/--worktree重置工作区重置为暂存区版本 或 最新提交版本,暂存区优先
重置工作区:丢弃工作区的更改,从指定提交 恢复指定文件的内容 。 注:这个操作有危险性,未提交的更改 会被永久丢弃且无法恢复。 工作区文件内容 = 指定提交里的内容git restore -s 提交哈希值 <文件路径> = git restore --source=提交哈希值 <文件路径> = git checkout 提交哈希值 -- <文件路径>

10. 删除文件:手动删除 = rm <文件路径>、从 暂存区删除 git rm --cached <文件路径>

用途 命令
从工作区 删除文件(暂存区仍存在) 手动删除、rm <文件路径> (不是git rm
从工作区、暂存区 同时删除文件 git rm <文件路径>
从"暂存区"删除文件、但工作区不删除(仍然保留在工作区) git rm --cached <文件路径> (多了个 --cached :不带 --cached选项时,会从工作目录中删除文件(物理删除), 带 --cached选项时,保留本地文件。
递归删除:删除目录以及目录下的所有文件 git rm -r directory/-r:递归删除 文件夹内部所有内容
强制删除(即使 文件有"未提交的更改") git rm -f <文件路径> -f = --force,强制删除。

11. 标签 tag:标记重要提交、常用于标记 "发布的版本号" → git tag

用途 命令
创建 无说明的"轻量标签"(Lightweight) = 对某个特定提交的引用。 :只会显示出"被打标签的提交 "的信息, 无 标签的其他详细信息,不会指明打标签的人是谁。 默认打在"当前最新提交"上git tag <标签名> git tag v1.0.1 :未指定 提交哈希值 时,默认在当前分支的最新提交 上 打标签。 ❷ 给指定提交 打轻量标签git tag <标签名> <提交哈希值>
创建 带说明的"附注标签"Annotated一般用于发布 。 (含打标签的用户名、邮箱、日期、标签说明) 默认打在"当前最新提交"上git tag -a <标签名> -m "标签说明"-a:annotated美/ˈænəteɪtɪd/,注释 :未指定 提交哈希值 时,默认在当前分支的最新提交 上 打标签。 git tag -a v1.0.0 -m "Release version 1.0.0"。 ❷ 给指定提交 打附注标签git tag -a <标签名> -m "标签说明" <提交哈希值>
查看 所有标签 git tag = git tag --list = git tag -l
查看 某个标签详情 git show <标签名> git show v1.0.0
按指定格式 查找标签 git tag -l "正则格式" = git tag --list "正则格式" :指定查找格式时,必须使用选项-l--list 才能指定格式。 : 指定匹配标签名的通配模式*git tag -l "v2.*" , ⇒ 可能匹配输出:v2.0.0v2.1.0v2.1.1
推送指定标签 到远程仓库 :默认情况下,git push 命令不会传送标签到远程仓库。 在创建完标签后,必须显式地推送标签到远程仓库。 git push <远程仓库别名> <标签名> git push github v1.0.0
推送 所有(不在远程仓库上的)标签 git push <远程仓库别名> --tags git push github --tags
删除 本地指定标签 git tag -d <标签名> git tag -d v1.0.0
删除 远程仓库的指定标签 二个步骤:❶ 删本地标签 + ❷ 删远程标签。 :推送本地仓库时 是不会推送标签的, 标签要"专门推送、专门删除" 方法一git push <远程仓库别名> :refs/tags/<标签名> 含义:将冒号前面的空值 推送到远程标签名,相当于删除它。 git push github :refs/tags/v0.9方法二git push <远程仓库别名> --delete <标签名> git push github --delete v0.9

12. 查找时 指定"搜索范围":grep (可用正则表达式 指定格式)

grep (Global Regular Expression Print) :全局正则表达式打印,用于查找字符串,可以在文本中 指定搜索模式

  • grep可以单用,也可以使用| 来搭配其他命令 一起使用。
用途 说明
在指定文件中 搜索关键词 grep "关键词" <文件路径>
筛选 含有"指定字符串"的结果 `
筛选 含有"有指定格式的字符串"的结果 `

13. 远程仓库:git remote

远程仓库常用的基础命令

用途 命令
克隆/下载 远程仓库(如 Github 上"已有的仓库") git clone <远程仓库的 git 地址>
查看 远程仓库信息 git remote -v
查看 某个远程仓库的详细信息(配置和状态) 如 所有远程分支名 , 在特定的分支上执行命令时,会自动关联到哪一个远程分支。 git remote show <远程仓库别名>
添加远程仓库:手动把本地项目和"远程仓库"关联 git remote add <远程仓库别名> <远程仓库的 Git 地址>
删除 已关联的远程仓库 git remote rm <远程仓库别名>
给远程仓库重命名 会更改所有远程跟踪的分支名字git remote rename origin github 过去引用 origin/main 的现在会引用 github/main git remote rename <旧别名> <新别名>

14. 同步远程仓库的更新、并推送本地 Git 仓库: git fetch、git diff、git merge、git pull、git push

相关基础命令

用途 命令
获取 "默认关联的远程仓库"的最新数据(未指定远程仓库时)git fetch 只下载远程数据,不合并 git fetch
获取 指定远程仓库的最新数据(不自动合并) git fetch <远程仓库的别名>
只获取 指定远程仓库的指定分支(不自动合并) 下载 指定的远程分支 到本地git fetch <远程仓库的别名> <远程分支名>; ❷ 下载 指定的远程分支 到指定的本地分支git fetch <远程仓库名> <远程分支名>:<本地分支名>
获取 所有远程仓库的数据 git fetch --all
查看 远程仓库信息 git remote -v(能看见自己远程仓库的别名;克隆下来的仓库,默认是 origin,也可以自己重命名)
查看 远程仓库分支的提交历史 git log <远程仓库的别名>/<远程分支名> --oneline
查看 本地的提交历史(每个提交一行) git log --oneline
查看 本地的提交历史(图形化、每个提交一行) git log --graph --oneline (若是远程仓库、本地仓库都有新提交,能查看"提交历史分叉"的情况
查看 远程仓库的指定分支的 最新提交历史(获取fetch新数据后) git log <远程仓库名>/<远程分支名> --oneline git log github/main --oneline
查看 本地分支、远程分支的差异 git diff A B A、B :远程分支、本地分支名。 比较的是 从 A 到 B 的变化 ,即 "在 A 的基础上,需要做什么更改才能得到 B "。 输出信息绿色字B 中新更改的内容红色字B 中没有的内容git diff <远程仓库的别名>/<远程仓库分支名> <本地分支名> = git diff github/main main。 或者 git diff <本地分支名> <远程仓库的别名>/<远程仓库分支名> = git diff main github/main
查看 仓库状态 git status
合并分支内容 合并到当前分支(带合并消息)git merge -m "合并消息" <远程仓库别名>/<远程分支名>合并到当前分支(不带合并消息)git merge <远程仓库别名>/<远程分支名> , 如 git merge github/main
不快进 合并分支内容 即使能快进,也创建 "合并提交" , 保留分支合并历史 git merge --no-ff origin/main --no-ff:不快进合并。
取消合并(回到合并前) git merge --abort
冲突时 使用对方版本 git merge -X theirs 分支名; X:指定合并策略选项;
冲突时 使用我方版本 git merge -X ours 分支名
从远程仓库 拉取数据(下载+合并 分支提交)git pull= git fetch + git merge 下载+合并 到"当前所在分支"git pull <远程仓库名> <远程分支名> : 远程分支 main → 当前所在分支(未指定=默认当前分支):git pull github main下载+合并 到"本地指定分支"git pull <远程仓库名> <远程分支名>:<本地分支名> : 远程分支 main → 本地分支 maingit pull github main:main。 ❸ 本地分支 已经设置了"上游跟踪"git pull
把本地 Git 仓库 推送到远程仓库 默认把本地分支 推送到"远程同名分支"git push <远程仓库别名> <本地分支名>把本地分支推送到 指定的远程分支git push <远程仓库名> <本地分支名>:<远程分支名>
建立跟踪关系 : 设置已有的本地分支 跟踪 一个刚刚拉取下来的远程分支修改正在跟踪的上游分支 git branch -u <远程仓库别名>/<远程分支> -u = --set-upstream-to ,设置上游分支。 设置当前分支 跟踪远程 main 分支 git branch -u github/main 简写,自动拉取并合并到当前分支git pull

15. Git 查看对象:git cat-file、git ls-files 、git count-objects、git rev-list 、git shortlog

用途 命令
查看 提交历史(每个提交一行) git log --oneline
查看 对象的内容 git cat-file -p <哈希值> cat:显示文件内容; cat-file:显示 Git 对象文件的内容。 -p 参数:表示 "pretty-print"(美化输出),会自动根据对象类型 格式化显示
查看 对象的类型 git cat-file -t <哈希值>
查看 某个文件的提交历史 git log --oneline <文件路径> git log --oneline README.md
在提交前,查看暂存区有什么文件 git ls-files --stage ls-files列出文件 (list files),显示当前暂存区中 所有文件的信息
查看 暂存区内容 与最新提交的差异 git diff --staged HEAD = git diff --cached HEAD --staged--cached 同一个意思。
查看 两个指定提交的差异 git diff 提交哈希值1 提交哈希值2
查看 当前提交与上一个提交的差异 git diff HEAD~1 HEAD
查看 对象数量(详细信息) git count-objects -v count-objects:统计 Git 对象。 -v = --verbose:显示详细输出 1. count.git/objects下 有 214 个对象。 2. size:214个对象,大小2699KB = 2.6MB。 3. in-pack: 包文件中的对象数量为 0 。 4. packs:包文件数量 为 0 (打包成一个文件可节省空间)。 5. size-pack:包文件大小为 0KB。 6. prune-packable:可以打包但尚未打包的对象数量 为0。 7. garbage:垃圾对象的数量、大小 为 0。
查看 指定提交到"起点"之间的 提交的数量 git rev-list --count HEAD rev-list :(到指定提交对象的) 所有提交的哈希值列表 (revision:修订版本 = 各个提交) --count只显示 提交的数量 ,不显示具体的提交哈希值。 HEAD:默认指向 当前分支的最新提交。 :截止到最新提交,共有 39 个提交。
查看 每个人的提交数量 git shortlog -sn git shortlog:显示 按作者分组的 "提交说明"列表 -s:简略模式,只显示提交次数和作者名 (不显示具体提交信息) -n:按提交次数降序排序(从多到少)。

16. Git 分支:git branch、git checkout、git switch、git merge

用途 命令
查看 文件内容 cat <文件路径>
查看 提交历史记录 git log --oneline(简洁版) git log --oneline -n-n 指定数量)
查看 仓库状态 git status
查看 对象的内容 git cat-file -p <哈希值>
创建分支 git branch <分支名> :默认基于当前分支的提交历史 创建新分支。 创建时,注意当前分支是哪个。 ❷ 基于指定分支 创建新分支git branch <新分支名> <基于的分支名> : 基于远程 dev 创建新分支。 git branch new-branch origin/dev
切换分支 git checkout <分支名> = git switch <分支名>(新语法,推荐)
合并指定分支 到当前分支 不带提交说明git merge <分支名>。 ❷ 禁用"快进合并" 的合并git merge --no-ff -m "合并提交的说明" <分支名>。 加了两个选项: --no-ff:禁用快进合并。 -m "合并提交的说明",非快进合并时,会创建一个新的合并提交 ,这是提交的说明。 ❸ 带提交说明的 合并git merge -m "合并提交的说明" <分支名> :用于非快进合并 ,会创建合并提交 ,带提交说明。 :无 --no-ff,仅 -m 时,若符合"快进合并",会自动忽略 -m,不创建 合并提交,直接 移动指针。
创建新分支 并切换到新分支 git checkout -b <新分支名> = git switch -c <新分支名>(新语法,推荐) = ❶ 创建 git branch <新分支名> (基于当前分支创建)+ ❷ 切换 git checkout <新分支名> :默认基于当前分支的提交历史 创建新分支。 基于指定分支 创建新分支并切换 git checkout -b <新分支名> <基于的分支名>
删除本地分支 :新分支上有提交时, 必须已经合并到其他分支了,才能-d删除,避免丢失数据。 git branch -d <分支名>
强行删除 本地未合并分支 危险操作:非常确认新分支上的内容不要了,才能强行删除。 git branch -D <分支名>
删除远程分支(已推送的分支) git push <远程仓库别名> --delete <远程分支>
查看 每一个分支的最后一次提交 git branch -v
查看 所有的已跟踪分支 git branch -vv ahead 2:本地还有 2 个提交没推送。 对比数据:从服务器上最后一次抓取的数据
查看 已经合并 或尚未合并到"当前分支"的分支 已经合并的分支git branch --merged。 ❷ 未合并的分支git branch --no-merged
查看 尚未合并到"指定分支"的分支。 git branch --no-merged <合并到的分支名> : 尚未合并到 main 分支的有哪些: git branch --no-merged main :在新分支里 也可以查看,不用切换到main分支再查看。
建立跟踪关系 : 设置已有的本地分支 跟踪 一个刚刚拉取下来的远程分支修改正在跟踪的上游分支 git branch -u <远程仓库别名>/<远程分支> -u = --set-upstream-to ,设置上游分支。 设置当前分支 跟踪远程 main 分支 git branch -u github/main 简写,自动拉取并合并到当前分支git pull

17. 保存 分支"未提交的更改":git stash

用途 命令
保存 当前分支"未提交的更改(= 暂存区更改+工作区更改)"工作目录: 恢复当前分支"最后一次提交",工作目录变干净。 不带说明信息git stash ; ❷ 带说明信息git stash push -m "stash 说明" push :表示"推送"到 stash 栈。 .git/refs/stash 只存储最新的 stash , 旧的 stash 存储在 reflog 中,可用 git reflog stash 查看。 只 stash 特定文件git stash push -- <文件路径>; ❹ 只 stash 暂存区的更改git stash push --staged -m "stash 说明,如 已暂存的修改"; ❺ stash 包含"未跟踪文件"git stash push -u -m "说明,如 包含新文件"-u:包含 未跟踪文件 untracked 。 ❻ stash 所有(包括未跟踪和忽略的文件)git stash push -a -m "说明,如 完整备份"
查看 所有 stash的列表 git stash list
恢复 最近的一次 stash,并保留 这个 stash 同时恢复 暂存区更改、工作区更改(推荐)git stash apply --index 只恢复工作区更改git stash apply
恢复 最近的一次 stash, 并删除这个 stash 同时恢复 暂存区更改、工作区更改(推荐)git stash pop --index 只恢复工作区更改git stash pop
恢复 指定的 stashstash@{0} 是最新的) 同时恢复 暂存区更改、工作区更改git stash apply --index stash@{1} 只恢复 工作区更改git stash apply stash@{1}
删除 指定 stash git stash drop stash@{6}
清空所有 stash git stash clear

18. 应用 指定提交里的 "新更改": git cherry-pick

用途 命令
将单个提交的新更改 应用到当前分支 git cherry-pick <提交哈希值>
将多个连续提交的新更改 应用到当前分支 从开始提交 到结束提交的新更改(不含开始提交)git cherry-pick <开始提交哈希值>..<结束提交哈希值> : 应用从 commitA 到 commitB 的所有提交(不包括开始提交 commitA ): git cherry-pick commitA..commitB; ❷ 从开始提交 到结束提交的新更改(含开始提交)git cherry-pick <开始提交哈希值>^..<结束提交哈希值>^:开始位置。 : 应用从 commitA 到 commitB 的所有提交(包括开提交 commitA ): git cherry-pick commitA^..commitB
应用 指定提交的新更改 (但不自动提交,只应用更改 到工作区) git cherry-pick -n <提交的哈希值>-n = --no-commit,不自动提交。
应用 指定提交的新更改 (编辑提交信息) git cherry-pick -e <提交的哈希值>-e = --edit,编辑提交信息。
继续 cherry-pick :如果 cherry-pick 时出现冲突,编辑冲突文件, git add 后继续执行 cherry pick git cherry-pick --continue
取消 cherry-pick (有冲突时,可取消) git cherry-pick --abort
不想解决冲突,跳过这个提交 (有冲突时,可跳过) git cherry-pick --skip

19. 推送本地新分支到 远程仓库、克隆远程仓库、基于远程分支 创建对应的本地分支:git branch、git push、git clone、git checkout、git switch

用途 命令
查看远程仓库 git remote -v
查看 所有本地分支 git branch
查看 所有分支名(含远程跟踪的) git branch -a
推送本地分支 到远程仓库 切换到要推送的本地分支上(默认推送到到远程同名分支)git push <远程仓库别名> <本地分支名>。 ❷ 推送到远程,并建立跟踪关系(-u 参数)git push -u <远程仓库别名> <本地分支名>-u--set-upstream:建立本地分支与远程仓库分支跟踪关系 。 如果第一次推送加 -u,之后可以在分支上直接 git push ,不用指定远程仓库。 ❸ 在其他分支上,指定推送的本地分支和远程分支git push <远程仓库别名> <本地分支>:<远程分支>
删除远程分支(已推送分支) git push <远程仓库别名> --delete <远程分支>
克隆远程仓库 git clone <远程仓库的 Git 地址>
基于远程分支,创建对应的本地分支 git checkout -b <本地分支> <远程仓库别名>/<远程分支> = ❷ git switch -c <本地分支> <远程仓库别名>/<远程分支> :克隆仓库时,只检出(checkout)默认分支 到工作目录,一般是main, 即 只会自动创建一个本地分支main其他分支 :不会自动创建本地分支,需要手动创建。基于远程分支,创建对应的本地分支

20. 变基:以"指定目标分支的最新提交"为基点(祖先),重写分支的"提交历史" :git rebase(只对"未推送的本地提交"使用变基)

用途 命令
把当前分支的提交历史 变基 基础 = 新的共同祖先 = 指定的基础分支的最新提交历史 git rebase <基础分支> 不指定目标分支,默认目标分支 = 当前分支 , = 改变当前分支的提交历史, <基础分支> 历史保持不变。 :用 main分支的最新提交为基础(= 最新的共同祖先),改变当前分支的提交历史: git rebase main
改变"指定目标分支"的提交历史(变基), <基础分支> 的历史保持不变 git rebase <基础分支> <目标分支> : 改变 dev 分支的提交历史(变基),新祖先 = main的最新提交历史 git rebase main dev
查找 所有操作记录 git reflog -n 使用 -n 指定最近的条数
版本回退:退回到未变基前 git reset --hard HEAD@{n} 在查找记录 reflog里,精准找到变基前的最新提交。 HEAD@{n} :可替换成变基前的最新提交哈希值(若能找到)


♣ 结束语 和 友情链接


  • 感谢:❤ 如果这篇文章 对您有帮助的话,可以点赞、评论、关注,鼓励下作者哦,谢谢小可爱们 ~╮( ̄▽ ̄)╭ ~
  • 欢迎指正: 如果发现 有需要更正的细节问题,欢迎指正。
  • 喜欢请收藏:喜欢本文 可收藏哦,方便快捷,会持续进行 ❶ 知识点更新 及 ❷ 修正错误。

  • 转载 请评论告知作者 并注明出处 ,Thanks♪(・ω・)ノ
    • 作者:Hey_Coder
    • 来源:CSDN
    • 版权声明:本文为博主原创文章,转载请附上博文链接!
相关推荐
colman wang4 小时前
Git指令(Mac)
git·macos
cyforkk7 小时前
Git 合并分支提示 Already up to date 的真实原因
git
●VON8 小时前
HarmonyKit | 移动端开发者工具类应用的现状与趋势
git·华为·性能优化·harmonyos·鸿蒙
●VON9 小时前
HarmonyKit | 鸿蒙开发协作:如何为 HarmonyKit 贡献一个新的工具
git·华为·harmonyos·鸿蒙
枕星而眠9 小时前
Git仓库基础用法
大数据·git·后端·elasticsearch·全文检索
梦想三三21 小时前
Git与GitHub基础入门:从零开始掌握版本控制与代码托管(完整图文教程)
人工智能·git·elasticsearch·github
Joy-鬼魅1 天前
Git常用操作
git
流浪0011 天前
Git篇(三):吃透远程协作:SSH 密钥、分支、标签全流程实战指南
运维·git·ssh
莫成2 天前
git相关命令查阅
git