Git 常用指令说明

[English]

备注

下文中出现的所有方括号([])中的内容均为用户根据实际情况自定义填写,不可直接照搬示例中的文字。

初始配置

首次使用 Git 时,需要配置用户名和邮箱,用于关联 commit 操作:

  • 设置用户名: 用户名会显示在每次提交记录中,用于标识提交作者。

git config --global user.name “espressif”   // 设置用户名为 espressif

备注

可以根据个人或团队要求设置任意名称,但最好使用真实或常用昵称,便于协作时识别提交者。

  • 设置邮箱:

git config --global user.email "xxx@espressif.com"   // 设置关联邮箱为 xxx@espressif.com

备注

邮箱应填写有效邮箱,便于接收通知或在远程仓库显示正确作者信息。

  • 查看所有配置:列出 Git 的所有配置,包括用户名、邮箱等信息,可用于确认设置是否生效。

git config --list

其他常用配置:

  • 设置默认编辑器:Git 在需要输入多行信息(如 commit 消息或合并冲突说明)时,会打开默认编辑器;如果未设置,默认使用系统编辑器(通常是 Vim)。

git config --global core.editor "nano"    // 设置默认编辑器为 nano
  • 启用彩色命令行输出:使 Git 命令输出更清晰。

git config --global color.ui auto   // auto 表示在终端支持颜色时启用,也可以手动设置为 true 或 false
  • 修改主分支名称:新建仓库时,默认主分支名称为 master(Git 2.28 之后可自定义)。

git config init.defaultBranch main  // 修改主分支名称为 main

配置 SSH 密钥

SSH 密钥是一种安全高效的身份验证方式,它通过加密技术在使用 Git 时实现免密码的远程连接。配置 SSH 密钥可以有效保护您的 Git 账号和代码安全,在 Windows 环境下的具体操作步骤如下:

备注

公钥与私钥的安全性非常重要,确保妥善保管您的私钥,切勿将其暴露或共享。

  1. 生成 SSH 密钥

  • 按下 Win+R 组合键,打开 运行 窗口。

  • 输入 cmd 并按回车,打开 命令提示符 窗口。

  • 在命令提示符窗口中输入以下指令并按回车。

ssh-keygen -t rsa -C 'xxx@espressif.com'   // 将 xxx@espressif.com 替换为你的真实邮箱地址,用于标记密钥归属。
  • 接下来终端会依次提示你输入以下相关信息,如无特殊需求,可直接按回车使用默认设置。

    • 密钥保存路径

    • 是否为私钥设置密码

    • 确认私钥密码

  • 设置完成后,终端屏幕将显示密钥文件的实际保存路径和验证信息,表示 SSH 密钥已成功创建。

  1. 找到生成的 SSH 公钥

  • 打开终端屏幕显示的密钥文件的实际保存路径,其中类型为 .pub 的文件为 SSH 公钥。

  • 右键该 .pub 文件,选择“打开方式”,使用“记事本”或“VS Code”等文件编辑器查看并复制。

  1. 将公钥配置到 Github 中

  • 登录 Github, 点击右上角的头像后选择 Settings > SSH and GPG keys > New SSH key

  • 将 SSH 公钥复制粘贴到 Key 文本框中。

  • Title 框中为该 SSH 密钥设置一个名字。

  • 点击 Add SSH key 完成 SSH 公钥的配置。

  1. 检查密钥是否配对成功

  • 在命令提示符窗口中输入以下指令:

ssh -T git@github.com
  • 如果窗口显示 Hi your-username! You've successfully authenticated. 说明 SSH 密钥配置成功。

创建/克隆仓库

创建仓库

在项目开始前,可以通过以下指令在本地创建一个新仓库:

git init

备注

此时仓库仅在本地,需要手动添加远程仓库并推送到 GitHub。

克隆远程仓库

如果想要克隆远程仓库,需要登录 Github,进入目标仓库页面,获取该仓库的 URL。

esp-idf 仓库 为例,具体步骤如下:

  1. 点击页面右上方绿色的 Code 按钮,弹出仓库 URL 框。

  2. 选择 URL 类型,HTTPS 或 SSH,需要注意 SSH 类型需提前 配置 SSH 密钥,便于免密登录。

  3. 点击复制按钮或手动复制所选 URL。

  4. 在终端中输入以下命令,将远程仓库复制到本地:

// 通过 HTTPS URL 克隆 esp-idf 仓库到本地,如需克隆其他仓库需更改 URL
git clone https://github.com/espressif/esp-idf.git

备注

可以在克隆时直接指定分支或标签,避免克隆默认分支再切换,相关指令如下,以 esp-idf 为例:

git clone -b release/v5.0 https://github.com/espressif/esp-idf.git   // 克隆 esp-idf release/v5.0 分支到本地
git clone --branch v5.0 https://github.com/espressif/esp-idf.git     // 克隆 esp-idf v5.0 版本到本地

备注

在执行以下 Git 指令前,请先进入目标仓库目录。

分支

在 Git 中,分支是一种并行开发机制,它是对代码开发历史的独立拷贝,允许在不干扰主分支的前提下开发新功能、测试、修复 bug。

branch 指令是管理分支的主要命令,可用于查看、创建、删除分支等。

  1. 查看分支

    • 查看所有本地分支:git branch

备注

星号 * 表示当前所在的本地分支。

  1. 创建/切换分支

    • 创建新分支,但不切换:git branch [Branch Name]

    • 切换到指定分支:git checkout [Branch Name]

    • 创建新分支并切换到该分支:git checkout -b [Branch Name]

  2. 删除分支

    • 删除分支:git branch -D [Branch Name]

  1. 合并分支

    • 将指定分支合并到当前分支:git merge [Branch Name]

    • 合并并保留合并记录:git merge --no-ff [Branch Name]

    • 中止合并:git merge --abort

将更改添加到暂存区

add 指令用于将更改后的文件添加至 Git 暂存区,以此明确标记出即将提交的内容,从而实现对版本变更的精确控制和有序管理。

  • 添加指定文件到暂存区:git add [File]

  • 添加所有更改到暂存区:git add .

备注

使用 git add [File] 指令时,确保当前路径位于目标文件所在的目录中,或提供相对于当前目录的正确路径。

提交更改

commit 指令用于将已添加到暂存区的更改提交至本地仓库,相当于创建了一个“版本快照”,记录此次修改的内容和说明。

  • 提交并添加说明:git commit -m "[Description]"

备注

使用 commit 指令进行提交前必须先使用 add 指令将更改添加到暂存区。

查看状态

status 指令用于查看当前工作区和暂存区的状态,它可以显示当前所在分支,哪些文件被修改或删除,哪些文件已添加到暂存区,以及是否有未提交的更改或未跟踪的文件。

  • 查看详细的工作目录和暂存区状态:git status

  • 查看简短状态(简写格式):git status -s

查看历史提交

log 指令用于查看 Git 仓库的历史提交记录,包括提交作者、时间、提交信息和哈希值,是理解项目变更轨迹的重要工具。

  • 显示完整的提交历史:git log

  • 以单行形式显示每次提交:git log --oneline

  • 图形化显示分支和合并关系:git log --graph

  • 查看指定作者的提交:git log --author="[Author]"

  • 查看从指定时间至今的提交:git log --since="[Time]"

  • 查看提交文件的具体更改内容:git log -p

  • 查看提交中更改的文件及行数统计:git log --stat

  • 显示最近几条提交记录:git log -n [Number]

  • 查看指定文件的更改历史:git log [File Name]

查看更改

diff 指令用于比较 Git 中个阶段(工作区、暂存区、历史提交)之间的差异,它不会改变任何内容,仅用于查看代码的具体变更内容。

  • 比较工作区和暂存区的差异:git diff

  • 比较暂存区和上一次提交的差异:git diff --cached``或``git diff --staged

  • 比较工作区和最后一次提交的所有差异,包括已暂存和未暂存的更改:git diff HEAD

  • 比较两次提交之间的差异:git diff [commit1][commit2]

  • 比较两个分支之间的差异:git diff [branch1][branch2]

  • 查看某个文件的差异,默认为该文件的工作区和缓存区:git diff [File Name]

忽略文件

在 Git 中,忽略文件指 Git 不跟踪、不纳入版本控制的一类文件,例如临时文件、日志、编译生成物、系统缓存等。可以在项目根目录创建一个名为 .gitignore 的文件,再将需要忽略的文件或文件夹路径写入该文件。

  • 忽略所有日志:*.log

  • 忽略所有临时文件:temp/

  • 忽略所有 .exe 文件:*.exe

  • 忽略 VS Code 工作空间配置:.vscode/

  • 忽略某个文件:[File Name]

远程仓库协作

在 Git 中,远程仓库协作指多个开发者通过连接同一个 Git 仓库进行分布式协同开发的过程。

  • 查看远程仓库信息:git remote -v

  • 建立本地空仓库和指定远程仓库的关联:get remote add origin [url]

  • 获取远程仓库最新提交并合并:git pull origin [Branch Name]

  • 获取远程仓库更改但不合并:git fetch origin

  • 推送本地提交到远程仓库:git push origin [Branch Name]