---
title: Git日常使用技巧拾遗
date: 2021-04-06 15:46:42
tags: [架构知识, 代码管理, Git]
categories:
  - [架构知识, Git]
---
Git在日常使用的时候，有些操作十分简单，但是一旦出现失误或者没有做过的操作，就会不知所措，如果再盲目乱试，又极有可能造成版本库损坏。这里收集了一些比较常见的Git版本库操作技巧。
<!-- more -->

## 修改Git的默认编辑器

修改Git的默认编辑器可以使用以下命令来实现：

```bash
git config --global core.editor nano
```

以上命令将Git在命令行中的默认编辑器设置为了nano，如果习惯使用vim，可以直接将nano替换为vim。

## 修改提交信息

提交信息的修改分为两种情况，第一种情况是仅修改最近一次提交的信息，可以直接使用`amend`。

```bash
git commit --amend
```

执行以上命令会打开一个编辑器，允许你修改最近一次提交的提交信息。

如果要修改以往的提交信息，必须要借助于`rebase`变基。对于修改提交信息可以利用Git提供的交互式变基来完成，在使用交互式变基时，必须指定要重写多久远的历史。例如修改最近6次提交的信息，可以执行以下命令。

```bash
git rebase -i HEAD~6
```

已经启动的编辑器只要被保存了，Git就会开始执行变基操作。执行这个命令以后，Git就会在编辑器中列举出被选中的提交。每个提交历史的格式都是`<命令> <提交编号> <提交信息>`，都是要对这次提交做的操作，例如`pick f7f3f6d changed files`表示继续采用提交编号为`f7f3f6d`的提交。如果要对这次提交进行修改，可以直接编辑提交历史项目前的命令。常用的命令如下。

* `pick`，采用本次提交，并且保持提交信息不变。
* `reword`，采用本次提交，但修改提交信息。
* `edit`，采用本次提交，但停下来做amend操作。编辑结束后可以使用`git rebase --continue`继续变基。
* `squash`，采用本次提交，但将本次提交与前一次提交（上面的）合并。
* `fixup`，行为与`squash`相同，但取消提交的日志信息。
* `exec`，执行一条shell命令。
* `break`，在当前位置暂停rebase，可以使用`git rebase --continue`继续。
* `drop`，丢弃本次提交。
* `reset`，将HEAD重置到指定标签。
* `merge`，建立一个合并提交信息，可以使用`-C`来指定新的提交信息。

在对提交列表进行编辑时，可以调整提交的顺序，这里只需要注意Git会按照从上到下的顺序应用变基操作。

## 从每一个提交中删除一个文件

当因为粗心向版本库中添加了不必要的文件可以使用以下指令来将其从所有的提交中删除。

```bash
git filter-branch --tree-filter 'rm -f 要删除的文件名' HEAD
```

> 注意，这个命令是核武器级的，能够影响整个版本库，在使用时要十分谨慎。

## 提交信息标准化

标准化的提交信息一般包含Header、Body、Footer三个部分，其中Header为提交的概要说明，Body为提交的详细描述，Footer中一般用于描述不兼容变更和被关闭的Issue信息。

对于提交信息标准化，主要是针对Header部分。Header一般建议写为`类型(影响范围):信息概要`的格式。其中类别主要有以下几种。

* `feat`，新增功能。
* `fix`，修复issue。
* `docs`，仅修改文档。
* `refactor`，重构代码，未新增任何功能，也未修复任何issue。
* `build`，改变构建流程，新增依赖库以及工具等。
* `style`，仅仅修改了空格、缩进等代码样式，不改变代码的逻辑。
* `pref`，改善性能和体现。
* `chore`，对代码和测试代码以外的内容进行的修改。
* `test`，修改了测试用例。
* `ci`，修改了自动化流程配置。
* `revert`，回滚到了上一个版本。

影响范围是可选的，如果修复的issue，可以书写issue的编号。对于其他的类型，可以书写相应的功能代号。
