1
0
wiki/Tech/getting-started/Git/进阶/常用技巧.md
2023-12-29 11:21:57 +08:00

230 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 常用技巧
description: Git 常用技巧
keywords:
- Git
- 技巧
tags:
- Git/进阶
sidebar_position: 3
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 使用的是 0x0ALF早期的 Mac OS 使用的是 0x0DCR后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0ACRLF 作为换行符。
```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 <branchName>
```
## 忽略文件更改
- 未提交:添加忽略文件相对路径到 .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` | 修饰的完整列表 |