魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • Package - Git - 终端命令 - git

文章摘要: Git分布式版本控制系统工具软件的使用命令汇总。

相关信息

外部相关文章

  • gitee官方提供的教程:https://gitee.com/all-about-git

内部相关文章

注释

  • 全局配置表示这台计算机中的操作系统中的这个用户中的所有的Git仓库都会使用这个配置。
  • 该文章参考了BiliBili上GeekHour的教学视频,视频连接:https://www.bilibili.com/video/BV1HM411377j?p=1
  • 如果是多人协作使,不要对已经推送到远程的分支进行rebase操作。

Git设置

提示

作用范围命令参数

  • --local:本地配置,对当前项目“当前本地仓库”生效。(默认参数)
  • --global:全局配置,对当前用户“所有仓库”生效。
  • --system:系统配置,对当前系统“所有用户和所有仓库”生效。

编辑配置文件

git config -e [--global]

设置用户名和邮箱

# 若用户名存在空格则需要使用双引号包裹起来
git config [<作用范围>] user.name "【用户名】"
git config [<作用范围>] user.email "【电子邮件】"

永久保存用户名和密码

# 将保存用户名和密码,后续提交文件无需再输入密码
git config [<作用范围>] credential.helper store

配置控制Git如何处理行结束符

注释

  • CRLF(回车换行)是Windows系统中使用的换行符,LF(换行)是Unix和Linux系统中使用的换行符。
  • 当你在跨平台的环境下使用Git时,Git会尝试根据你的系统设置来转换文件中的换行符。
  • 推荐进行全局配置。
# `core.autocrlf`:配置控制Git如何处理行结束符。
# - `true` 或 `auto`(在Windows系统上默认): 提交时转换成LF,检出时转换成CRLF。
# - `false`: 禁用自动转换。
# - `input`(在Linux和macOS系统上默认): 提交时转换为LF,但在检出时不进行转换。
git config [<作用范围>] core.autocrlf input  # Linux系统
git config [<作用范围>] core.autocrlf auto   # Windows系统

# `core.eol`:配置在“检出”时Git应该使用哪种行结束符。
# - `lf`: 使用LF作为行结束符。
# - `crlf`: 使用CRLF作为行结束符。
# - `native`: 使用操作系统的默认行结束符。
git config [<作用范围>] core.eol lf    # Linux系统
git config [<作用范围>] core.eol crlf  # Windows系统

# `core.safecrlf`:配置检查在提交或检出时是否出现了意外的不安全行结束符转换。
# - `true`: 拒绝提交包含混合行结束符的文件。
# - `false`: 允许提交包含混合行结束符的文件。
# - `warn`: 提交时警告混合行结束符的存在。
git config [<作用范围>] core.safecrlf warn

查询git配置

查看Git的配置信息

# 查看全部配置信息
git config [<作用范围>] --list

# 查看用户名
git config [<作用范围>] user.name

# 查看邮箱
git config [<作用范围>] user.email

# 检查 core.autocrlf 的当前设置
git config [<作用范围>] --get core.autocrlf

# 检查 core.eol 的当前设置
git config [<作用范围>] --get core.eol

# 检查 core.safecrlf 的当前设置
git config [<作用范围>] --get core.safecrlf

仓库操作

创建(初始化)仓库

# 将当前目录作为Git仓库进行初始化
git init

# 新建一个目录,将其初始化为Git代码库
git init [<仓库名>]

查看仓库提交历史记录

# 查看仓库提交历史记录
git log

# 使用`--oneline`参数来查看简洁的提交记录
git log --oneline

查看仓库的状态

# 列出未提交的新的或修改的文件
git status

跟踪(关联)远程仓库的操作

# 查询
git remote -v

# 添加
git remote add "<远程仓库名>" "<远程仓库URL>"

# 断开
git remote remove "<远程仓库名>"

# 修改 - 当前跟踪的远程仓库在本地的别名
git remote rename "<远程仓库名>" "<新的远程仓库的别名>"

# 修改 - 当前跟踪的远程仓库在本地的URL地址
git remote set-url "<远程仓库名>" "<新的RUL>"

克隆(下载)远程仓库

# 克隆/下载,将远程仓库的main分支“克隆”到本地仓库
# 默认克隆远程仓库的主分支
git clone "<远程仓库URL>"

# 克隆/下载,将远程仓库的指定分支“克隆”到本地仓库
git clone -b "<分支名>" "<远程仓库URL>"

分支操作

创建分支

# 创建新分支
git branch "<分支名>"

提示

在后续遇到要新建分支时,创建分支后,会在当前分支的修改基础上提示你“缓存区”有修改的文件,是否要保存到“本地仓库”。

这个时候可以选择以下两种做法:

  • 副本分支:将“缓存区”中发生修改的文件全部保存。
  • 空白分支:将发生修改的文件全部剔除,还原。

删除分支

# 删除分支
git branch -d "<分支名>"

# 强制删除分支
git branch -D "<分支名>"

修改分支

# 修改当前分支名称
git branch -M  "<新分支名>"

# 修改指定分支名称
git branch -m "<旧分支名>" "<新分支名>"

查看分支

# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看所有分支
git branch -a

切换分支

# 切换到指定分支,并更新工作区
git checkout "<分支名>"

# 切换并创建新分支,没有原先的历史版本记录
git checkout --orphan "<分支名>"

合并分支

# `-no-ff`参数表示禁用Fast forward模式,合并后的历史有分支,能看到曾经做过合并
git merge --no--ff -m "<主分支名>"/"<分支名>"

# `-ff`参数表示使用Fast forward模式,合并后的历史会变成一条直线
git merge --ff -m "<主分支名>"/"<分支名>"

# 合并所有提交到一个提交
git merge --squash "<分支名>"

# 取消当前合并操作状态
git merge --abort

获取(远程分支->本地分支)

注释

  • 获取操作并没有真正将远程分支下载到本地。
  • 只是能在本地看到或查询到远程分支。
  • 需要再次执行拉取分支操作。
  • 在本地会有如下显示:remotes/<远程仓库名>/<远程分支名>
# 获取全部分支,将所有远程分支“下载”到本地仓库
git fetch "<远程仓库名>"

# 获取指定分支,将指定远程分支“下载”到本地仓库
git fetch "<远程仓库名>" "<分支名>"

跟踪(关联)远程分支

  • 当前分支正在跟踪哪条远程分支。
# 查询 - 当前分支正在跟踪哪条远程分支。
git branch -vv

# 跟踪远程分支
git branch -u "<添加的远程仓库名>"/"<远程分支名>"

# 断开远程分支
git branch --unset-upstream

推送(本地分支->远程分支)

# 推送,将本地文件“更新”到远程仓库(遇到冲突将提交失败)
git push "<远程仓库名>" "<本地分支名>":"<远程分支名>"

# 强制推送,将本地分支“覆盖”到远程仓库(遇到冲突将强制覆盖远程分支)
git push "<远程仓库名>" "<本地分支名>":"<远程分支名>" --force-with-lease

# 设置上游分支,若远程分支不存在将创建分支
git push "<远程仓库名>" "<本地分支名>":"<远程分支名>" --set-upstream

拉取(远程分支->本地分支)

注释

  • 拉取操作之前,需要确定能够在本地看到远程分支。
  • 可以进行获取操作,来查看到远程分支。
# 拉取,将远程仓库“更新”到本地仓库
git pull "<远程仓库名>" "<分支名>"

# 强制拉取,将远程仓库“覆盖”到本地仓库
git pull "<远程仓库名>" "<远程分支名>":"<本地分支名>" --force

# 将远程分支“变基”到本地分支
git pull --rebase

整理分支中的提交历史/停止变基状态

# `rebase`操作可以把本地未push的分叉提交历史整理成直线,看起来更直观。
git rebase "<主分支名>"

# 停止变基,取消当前变基状态。
git rebase --abort

标签

新建标签

# 新建标签在当前版本中
git tag "<标签名>"

# 新建标签在指定版本中
git tag "<标签名>" [commit]

删除标签

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

# 删除远程tag
git push origin :refs/tags/[tagName]

查看标签

# 列出所有标签
git tag

# 查看tag信息
git show "<标签名>"

查看信息

# 显示有变更的文件
git status

# 显示当前分支的版本历史
git log

# 显示commit历史,以及每次commit发生变更的文件
git log --stat

# 搜索提交历史,根据关键词
git log -S [keyword]

# 显示某个commit之后的所有变动,每个commit占据一行
git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件改名
git log --follow [file]
git whatchanged [file]

# 显示指定文件相关的每一次diff
git log -p [file]

# 显示过去5次提交
git log -5 --pretty --oneline

# 显示所有提交过的用户,按提交次数排序
git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
git blame [file]

# 显示暂存区和工作区的差异
git diff

# 显示暂存区和上一个commit的差异
git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
git diff HEAD

# 显示两次提交之间的差异
git diff [first-branch]...[second-branch]

# 显示今天你写了多少行代码
git diff --shortstat "@{0 day ago}"

# 显示某次提交的元数据和内容变化
git show [commit]

# 显示某次提交发生变化的文件
git show --name-only [commit]

# 显示某次提交时,某个文件的内容
git show [commit]:[filename]

# 显示当前分支的最近几次提交
git reflog

文件操作

提交文件到暂存区/改为跟踪状态

# 添加当前路径下的所有修改过的文件到暂存区
git add .

# 添加指定文件到暂存区
git add <文件> ...

# 添加指定目录到暂存区,包含子目录
git add <目录> ...

从暂存区移除文件/撤销文件操作

git restore <文件>

修改为未跟踪状态/移除跟踪文件

# `-r`:递归删除文件夹和文件。

# 删除“缓存区”和“工作区”中的文件
git rm <文件>

# 删除“缓存区”,保留“工作区”中的文件
git rm --cached <文件>

代码提交

暂存区文件提交到本地仓库

# 提交所有缓存区的文件到本地仓库
git commit -m "提交消息"

# 提交所有已修改的文件到本地仓库
git commit -a -m "提交消息"

版本控制

查看版本/文件差异

# 查看工作区、暂存区、本地仓库之间的差异
# 默认比较“工作区”和“暂存区”之间的差异内容,显示发生更换的文件以及更改的详细信息
# 查看未暂存的文件更新了哪些部分
git diff

# 查看“工作区”和“本地仓库”之间的差异
git diff HEAD

# 查看“暂存区”和“本地仓库”之间的差异
git diff --cached

# 查看两个提交之间的差异
git diff <分支名-id> <分支名-id>

回滚历史版本

# `--hard`参数,“丢弃”工作区和暂存区的所有修改内容
git reset --hard

# `--soft`参数,“保留”工作区和暂存区的所有修改内容
git reset --soft

# `--mixed`参数,“保留”工作区“丢弃”暂存区的修改内容。
git reset --mixed

存储/存档

stash操作可以把当前工作现场“储藏”起来,等以后回复现场后继续工作。

# save参数表示存储的信息,可以不写
git stash [save] "<分支名>"

# `-u`参数表示把所有未跟踪的文件也一并存储
git stash -u "<分支名>"

# `-a`参数表示把所有未跟踪的文件和忽略的文件一并存储
git stash -a "<分支名>"

# 查看所有stash
git stash list

# 恢复最近一次stash
git stash pop

# 恢复指定的stash
# stash@{2}表示第三个stash
# stash@{0}表示最近的stash
git stash pop stash@{2}

# 重新接受最近一次stash
git stash apply

# `pop`和`apply`的区别是,`pop`会把`stash`内容删除,而`apply`不会。可以使用`git stash drop`来删除`stash`。
git stash drop stash@{2}

# 删除所有stash
git stash clear

其他

帮助

# 全部帮助
git help
# 查看特定命令的帮助
git <命令名> --help

生成可供发布的压缩包

# 生成一个可供发布的压缩包
git archive
更新时间: 2025/10/22 03:09