# Git 常用命令笔记

本笔记旨在整理 Git 的基础配置、本地与远程仓库管理、分支操作及一些实用技巧。


# 一、基础配置

# 1. 查看与设置用户信息

在首次使用 Git 前,需要配置全局的用户名和邮箱。

命令 功能说明
git config --list 查看当前的 Git 配置信息。
git config --global user.name "Your Name" 设置全局用户名。
git config --global user.email "your.email@example.com" 设置全局用户邮箱。
# 查看所有配置
git config --list

# 设置全局用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# 2. 配置 SSH 密钥

为了免密与 GitHub 等远程仓库进行通信,推荐使用 SSH 协议。

  1. 生成 SSH 密钥对。
  2. 将公钥(通常是 ~/.ssh/id_rsa.pub)的内容添加到 GitHub 账户的 SSH keys 设置中。

配置完成后,可通过以下命令验证连接是否成功,出现欢迎信息即表示配置正确。

ssh -T git@github.com

# 二、本地仓库管理

# 1. 初始化仓库 (git init)

在项目根目录中执行此命令,将会创建一个 .git 文件夹,用于存储版本库的所有信息。

git init

设置默认分支名:
新版 Git 推荐使用 main 作为默认主分支名,可以通过以下命令进行全局配置,避免每次 git init 时都出现提示。

git config --global init.defaultBranch main

删除本地仓库:
直接删除项目根目录下的 .git 文件夹即可。

# 在 Linux / macOS / Git Bash 中
rm -rf .git

# 2. 提交代码 (git add & git commit)

代码提交分为两步:首先使用 git add 将文件更改添加到暂存区,然后使用 git commit 将暂存区的内内容永久保存到本地仓库。

命令 功能说明
git add <file> 将指定文件的更改添加到暂存区。
git add . 将当前目录下所有文件的更改添加到暂存区。
git commit -m "commit message" 将暂存区内容提交到仓库,并附上提交信息。
git commit -am "commit message" 将所有已跟踪文件的更改直接暂存并提交(跳过git add)。

# 3. 查看提交历史 (git log)

git log 命令用于查看从近到远的提交历史。

命令 功能说明
git log 显示详细的提交历史(Commit ID, 作者, 日期, 提交信息)。
git log --stat git log 的基础上,显示每次提交所修改的文件列表。
git log --oneline 以简洁的单行格式显示提交历史。
git show <commit_id> 显示某次特定提交的详细变更内容(代码差异)。
# 查看简略历史
git log --oneline

# 查看某次提交的具体修改
git show 9b568e99

# 4. 版本回退 (git reset)

git reset 可以将当前分支的 HEAD 指针移动到指定的提交记录,常用于撤销提交。

警告: --hard 参数会丢弃工作区和暂存区中自指定提交以来的所有更改,操作具有破坏性,请谨慎使用。

# 回退到指定的 commit,并丢弃之后的所有修改
git reset --hard <commit_id>

# 示例:回退到 9b568e99 这个提交
git reset --hard 9b568e99

# 三、分支管理

# 1. 查看与状态检查

命令 功能说明
git branch 列出所有本地分支,并用 * 标记当前所在分支。
git status 显示当前分支的状态,包括已修改、已暂存和未跟踪的文件。

# 2. 创建与切换分支

命令 功能说明
git branch <branch_name> 创建一个新分支,但仍停留在当前分支。
git checkout <branch_name> 切换到已存在的分支。
git checkout -b <branch_name> 创建一个新分支,并立即切换到该分支。
# 创建一个名为 "develop" 的分支并切换过去
git checkout -b develop

# 3. 合并分支 (git merge)

将其他分支的更改合并到当前所在的分支。

流程示例:develop 分支合并到 main 分支。

  1. 首先,切换到接收更改的目标分支 main
    git checkout main
  2. 然后,执行 merge 命令。
    git merge develop

# 4. 删除分支 (git branch -d)

命令 功能说明
git branch -d <branch_name> 删除已合并的分支。如果分支包含未合并的更改,会提示失败。
git branch -D <branch_name> 强制删除一个分支,无论其是否已合并。
# 删除已合并的 develop 分支
git branch -d develop

# 四、远程仓库协作

# 1. 关联远程仓库 (git remote)

命令 功能说明
git remote -v 查看当前配置的所有远程仓库。
git remote add <name> <url> 添加一个新的远程仓库,通常命名为 origin
git remote set-url <name> <new_url> 更新一个已存在的远程仓库地址。
# 关联一个新的远程仓库,命名为 origin
git remote add origin git@github.com:user/repo.git

# 如果需要修改地址
git remote set-url origin git@github.com:user/new-repo.git

# 2. 推送至远程仓库 (git push)

将本地分支的提交推送到远程仓库。

# 首次推送 master 分支,并设置上游跟踪关系
git push -u origin master

# 后续推送
git push

# 推送其他分支,如 test 分支
git push -u origin test

认证: 使用 https 协议推送时,通常需要输入个人访问令牌(Personal Access Token);使用 ssh 协议则通过 SSH 密钥对自动认证。

# 3. 克隆远程仓库 (git clone)

从远程仓库下载一个完整的项目副本到本地。

# 克隆默认主分支
git clone git@github.com:user/repo.git

# 克隆时指定特定分支
git clone -b release/v8.2 https://github.com/lvgl/lvgl.git

# 五、Git 实用技巧

# 1. 忽略文件 (.gitignore)

通过在项目根目录创建 .gitignore 文件,可以指定不需要被 Git 跟踪的文件或目录(如编译产物、日志文件等)。

规则示例:

# 忽略所有 .a 文件
*.a

# 但不忽略 lib.a
!lib.a

# 忽略 build/ 目录下的所有内容
build/

# 忽略 doc/notes.txt 文件
doc/notes.txt

清理已跟踪文件: 如果某个文件在添加到 .gitignore 之前已经被提交,需要先从 Git 的索引中移除它,然后再次提交。

# 从索引中移除 build 目录,但保留本地文件
git rm -r --cached build/

# 提交 .gitignore 和移除操作
git commit -m "Update .gitignore and untrack build directory"

# 2. 重命名分支

# 场景一:分支未推送到远程

# 将 oldName 分支重命名为 newName
git branch -m oldName newName

# 场景二:分支已推送到远程

需要分步操作:

  1. 重命名本地分支
    git branch -m oldName newName
  2. 删除远程的旧分支
    git push origin --delete oldName
  3. 推送新分支并建立跟踪关系
    git push -u origin newName