1. Git 配置体系
Git 配置文件分为三级,优先级以离仓库最近为原则:目录级 > 用户级 > 系统级。如果三者配置不同,目录级覆盖用户级,用户级覆盖系统级。
Git 配置不是单纯的个人偏好。身份、换行、签名、凭据和别名都会影响协作历史、跨平台差异和安全边界。能全局设置的,未必都应该全局设置;项目级约定应该优先写进仓库配置、.editorconfig、.gitattributes 或文档。
| 级别 | 文件位置 | 作用范围 | 参数 |
|---|---|---|---|
| 系统级 | /etc/gitconfig | 系统上所有用户及所有仓库 | --system |
| 用户级 | ~/.gitconfig | 当前用户的所有仓库 | --global |
| 目录级 | .git/config | 仅当前仓库 | --local(默认) |
# 设置用户名和邮箱(通常配置在用户级)
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
# 查看所有配置
git config --list
# 检查某一项配置
git config <key>设置默认分支名
Git 初始化仓库时的默认分支名可以自定义:
git config --global init.defaultBranch main2. 多平台换行符处理
不同操作系统的换行符不同:UNIX/Linux 使用 LF(0x0A),Windows 使用 CRLF(0x0D0A)。跨平台协作时,换行符不一致会导致无意义的差异。
# 提交时转换为 LF,检出时转换为 CRLF(Windows 推荐)
git config --global core.autocrlf true
# 提交时转换为 LF,检出时不转换(Mac/Linux 推荐)
git config --global core.autocrlf input
# 提交和检出均不转换
git config --global core.autocrlf false
# 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
# 允许提交混合换行符
git config --global core.safecrlf false
# 提交混合换行符时给出警告
git config --global core.safecrlf warn跨平台工作推荐配置:
git config --global core.autocrlf input
git config --global core.safecrlf true3. Git 别名
通过别名缩短常用命令可以提升交互效率,但别名不应该成为脚本依赖。个人别名越短,越要确保自己知道它真实执行了什么。
Git 内部别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commitShell 别名
在 Shell 配置文件中添加更简短的别名:
alias g='git'
alias ga='git add'
alias gco='git checkout'
alias gcb='git checkout -b'
alias gcm='git checkout master'
alias gcd='git checkout develop'
alias gd='git diff'
alias gf='git fetch'
alias gfo='git fetch origin'
alias gl='git pull'
alias gp='git push'根据实际工作习惯创建适合自己的缩写。
4. GPG 签名提交
GPG 签名可以验证提交者身份,确保提交未被篡改。
创建并配置 GPG 密钥
# 1. 生成 GPG 密钥对
gpg --full-gen-key
# 2. 列出密钥,复制密钥 ID(sec 行中 / 后面的部分)
gpg --list-secret-keys --keyid-format LONG "[email protected]"
# 3. 导出公钥(用于添加到 GitHub/GitLab 等平台)
gpg --armor --export <密钥ID>
# 4. 在 Git 中配置签名密钥
git config --global user.signingkey <密钥ID>将导出的公钥添加到你的 Git 托管平台(GitHub、GitLab、Gitee 等)。
签名提交
# 单次签名提交
git commit -S -m "提交信息"
# 开启默认签名(每次提交自动签名)
git config --global commit.gpgsign true验证签名
推送后在托管平台查看提交,应显示 “Verified” 标记。
导入已有密钥
如果已有 GPG 密钥,可以直接导入:
gpg --import your_private_key_file
gpg --import your_public_key_file
# 设置信任级别
gpg --edit-key <密钥ID>
gpg> trust
gpg> 5
gpg> quit然后重复上述第 4 步配置 Git 关联密钥。
5. 压缩提交记录
在新分支进行了多次提交后,可以使用 --squash 将提交压缩合并为一个:
git merge --squash <branchName>这会将目标分支的所有变更压缩为一个未提交的更改,你可以一次性提交。
6. 忽略文件更改
- 未提交的文件:将文件相对路径添加到
.gitignore即可。 - 已提交的文件:先从跟踪中移除,再添加到
.gitignore:
git rm --cached <file>7. 凭据存储
配置凭据存储后,无需每次输入用户名和密码。便利性越高,越要确认凭据保存在哪里、谁能读取、设备是否可信。
凭证缓存
凭证保存在内存中,超时后自动清除:
# 开启缓存(默认 15 分钟)
git config --global credential.helper cache
# 自定义超时时间(秒)
git config --global credential.helper 'cache --timeout=3600'凭证管理器
使用操作系统的密钥链存储凭证,更安全:
# Windows
git config --global credential.helper manager
# macOS
git config --global credential.helper osxkeychain
# Linux
git config --global credential.helper cache凭证存储
将凭证以明文保存到磁盘(安全性较低,仅限可信设备):
git config --global credential.helper store首次输入用户名和密码后,凭证会保存到 ~/.git-credentials。注意:不要在共享或公共设备上使用此方式。
8. 日志美化
通过 format.pretty 设置全局日志格式:
git config --global format.pretty "%C(red)%h%C(reset) - %C(yellow)%d%C(reset) %s %C(green)(%cr) %C(bold blue)<%an>%C(reset)"常用占位符:
| 占位符 | 说明 |
|---|---|
%h | 简短提交哈希 |
%H | 完整提交哈希 |
%s | 提交信息标题 |
%an | 作者名字 |
%ar | 作者修订日期(相对格式,如 “2 weeks ago”) |
%d | 分支名、标签等修饰信息 |
%C(color) | 设置颜色,如 %C(red) |
%C(reset) | 重置颜色 |
9. 实用进阶命令
git stash — 保存和恢复工作现场
临时保存未提交的修改,清理工作区以便切换分支:
git stash # 保存当前修改
git stash list # 查看所有保存的修改
git stash pop # 恢复最近一次保存并删除记录
git stash apply # 恢复最近一次保存但保留记录git bisect — 二分查找引入 Bug 的提交
通过二分法快速定位导致问题的提交:
git bisect start # 开始二分查找
git bisect bad # 标记当前提交有问题
git bisect good <commit> # 标记某个提交是正常的
git bisect reset # 结束查找git blame — 查看文件每行的修改记录
显示文件每一行最后一次修改的提交和作者:
git blame <file> # 查看文件每行的修改记录
git blame -L 10,20 <file> # 查看指定行范围git cherry-pick — 挑选提交应用到当前分支
将其他分支的某个提交复制到当前分支:
git cherry-pick <commit> # 应用指定提交
git cherry-pick <commit1> <commit2> # 应用多个提交git revert — 撤销提交
创建一个新提交来撤销指定提交的变更(不修改历史):
git revert <commit> # 撤销指定提交
git revert HEAD # 撤销最近一次提交git reflog — 引用日志,找回丢失的提交
记录所有 HEAD 的移动历史,可用于恢复误删的分支或提交:
git reflog # 查看所有 HEAD 移动记录
git reset --hard <reflog-entry> # 恢复到指定状态git clean — 清理未跟踪文件
从工作区移除未被 Git 跟踪的文件:
git clean -n # 预览将要删除的文件(不实际删除)
git clean -f # 删除未跟踪的文件
git clean -fd # 删除未跟踪的文件和目录10. 使用原则
项目约定优先于个人偏好:换行、格式化、签名、提交规范这类协作规则,最好进入仓库约定,而不是只存在于个人 ~/.gitconfig。
别名只服务交互:别名可以让日常更顺手,但文档、脚本、CI 和教学材料应写完整命令。
凭据存储按设备分级:个人可信设备可以用系统密钥链;共享机器、临时容器和 CI 环境不应长期保存明文凭据。
进阶命令先想恢复路径:stash、bisect、reflog、revert 是恢复和定位工具;clean、reset --hard、历史重写则需要先确认损失范围。
配置完成后,Git 还能通过钩子自动化任务、通过 LFS 管理大文件。它们都在扩展 Git 的边界,因此更需要明确团队约定。