--- title: 常用技巧 description: Git 常用技巧 keywords: - Git - 技巧 tags: - Git/进阶 - 技术/入门 author: 7Wate date: 2022-09-13 --- ## Config 配置 Git 配置文件分为三级,系统级(--system)、用户级(--global)和目录级(--local),三者的使用优先级以离目录(repository)最近为原则,如果三者的配置不一样,则生效优先级 **目录级>用户级>系统级**。 1. **系统级**(/etc/gitconfig):使用 **--system** 来进行配置,该配置**对系统上所有用户及他们所拥有的仓库都生效**的配置值。 ```shell git config --system user.name "用户名" git config --system user.email "邮箱地址"` ``` 1. **用户级**(~/.gitconfig):使用 **--global** 来进行配置,该配置**对当前用户上所有的仓库有效**。 ```shell git config --global user.name "用户名" git config --global user.email "邮箱地址" ``` 1. **目录级**(.git/config):使用 **--local** 来进行配置,**只对当前仓库生效。** ```shell git config --local user.name "用户名" git config --local user.email "邮箱地址" ``` ## 设置默认分支 可以根据需求设置为**系统级(--system)、用户级(--global)和目录级(--local)**。 ```shell git config --global init.defaultBranch <分支名称> ``` ## 多平台换行符问题 (LF or CRLF) **文本文件所使用的换行符,在不同的系统平台上是不一样的。**UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是 0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF) 作为换行符。 ```shell # 提交时转换为LF,检出时转换为CRLF git config --global core.autocrlf true # 提交时转换为LF,检出时不转换 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 做如下配置: ```shell git config --global core.autocrlf input git config --global core.safecrlf true ``` ## Alias 重命名别名 ```shell git config --global alias.st status //status 缩写成 st git config --global alias.co checkout //checkout 缩写成 co git config --global alias.br branch //branch 缩写成 br git config --global alias.ci commit //commit 缩写成 ci git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" ``` ```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' ``` Git 常用命令,可以根据实际需要创建缩写命令。 ## GPG 签名提交 1. 生成 GPG 密钥对 ```shell // 1.1 创建 GPG 密钥 gpg --full-gen-key // 1.2 列出 GPG 密钥 gpg --list-secret-keys --keyid-format LONG "your_email" // 1.3 复制 GPG 密钥 ID,以下示例复制 4AEA00A342C24CA3。 sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC] 6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4 uid [ 绝对 ] your_name "your_email" ssb cv25519/812B586FD245B560 2021-09-14 [E] // 1.4 导出 GPG 公钥(以上述 ID 为例) gpg --armor --export 4AEA00A342C24CA3 ``` 1. 平台添加 GPG 公钥配置 将 GPG 公钥添加到 git 托管平台,例如 Github、Gitlab、Gitee 等。 1. 本地 Git 仓库关联 GPG 密钥 ```shell // 3.1 列出 GPG 密钥 gpg --list-secret-keys --keyid-format LONG "your_email" // 3.2 复制 GPG 密钥 ID,以下示例复制 4AEA00A342C24CA3。 sec ed25519/4AEA00A342C24CA3 2021-09-14 [SC] 6DE3507E82DEB6E8828FAAC34AEA00A342C24BD4 uid [ 绝对 ] your_name "your_email" ssb cv25519/812B586FD245B560 2021-09-14 [E] // 3.3 本地 Git 仓库中配置该密钥,对 commit 提交进行签名。 git config --global user.signingkey 4AEA00A342C24CA3 ``` 1. 签名 Git commit 运行 Git commit 命令时需要用到 `-S` 参数,如果不希望每次都要输入 `-S` 标志,可以配置默认签名。 ```shell // 签名提交 git commit -S -m "your_commit_message" // 开启默认签名提交 git config --global commit.gpgsign true ``` 1. 验证签名 最后可以推送签名提交到 git 托管平台,验证是否签名成功! ## 压缩提交记录 如果在新分支进行了多次提交,然后想合并到主分支。可以使用 --squash 选项,压缩合并提交。 ```shell // 将目标分支的提交压缩为一个,然后合并分支 git merge --squash ``` ## 忽略文件更改 - 未提交:添加忽略文件相对路径到 .gitignore 中即可。 - 已提交:`git rm --cached file`,添加忽略文件相对路径到 .gitignore 中即可。 ## 配置 Git 的凭据存储 当使用 Git 进行代码管理时,你**可以配置 Git 的凭据存储,这样就不需要每次都输入用户名和密码。** 下面是使用 Git 的凭据存储的简单步骤: 1. 打开终端,并运行以下命令配置 Git 的凭据存储: ```shell git config --global credential.helper store ``` 2. 现在,使用 `git push` 命令进行一次身份验证。输入用户名和密码,并完成 push 操作。 3. Git 会将你的凭据保存在本地。下次进行操作时,Git 会自动使用保存的凭据,无需再次输入密码。 4. 使用 `cat` 命令查看 `.git-credentials` 文件的内容。 ```shell cat ~/.git-credentials ``` 这样,你就可以在使用 Git 进行操作时记住密码了。请注意,**使用 store 凭据存储方式会将密码明文保存在磁盘上**,所以请确保你的机器是安全的,并且不要在共享或公共设备上使用该功能。 ## 全局的 Git 日志美化 可以使用 `git config --global format.pretty` 设置一个全局的 Git 日志格式化语句。 ```bash 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` | 提交的简短哈希字符串 | | `%T` | 树的完整哈希字符串 | | `%t` | 树的简短哈希字符串 | | `%P` | 父节点的完整哈希字符串 | | `%p` | 父节点的简短哈希字符串 | | `%an` | 作者的名字 | | `%ae` | 作者的电子邮件地址 | | `%ad` | 作者修订日期(可以用 --date=选项定制格式) | | `%ar` | 作者修订日期,相对格式(例如,“2 weeks ago”) | | `%cn` | 提交者的名字 | | `%ce` | 提交者的电子邮件地址 | | `%cd` | 提交日期 | | `%cr` | 提交日期,相对格式 | | `%s` | 提交信息标题 | | `%b` | 提交信息正文 | | `%Cred` | 文字颜色为红色 | | `%Cgreen` | 文字颜色为绿色 | | `%Cblue` | 文字颜色为蓝色 | | `%Creset` | 重置前面设置的颜色 | | `%C(yellow)` | 文字颜色为黄色 | | `%d` | 修饰(比如分支名,标签名) | | `%D` | 修饰的完整列表 |