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 main

2. 多平台换行符处理

不同操作系统的换行符不同: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 true

3. 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 commit

Shell 别名

在 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 环境不应长期保存明文凭据。

进阶命令先想恢复路径stashbisectreflogrevert 是恢复和定位工具;cleanreset --hard、历史重写则需要先确认损失范围。

配置完成后,Git 还能通过钩子自动化任务、通过 LFS 管理大文件。它们都在扩展 Git 的边界,因此更需要明确团队约定。