# 修改 Commit

假设你已经将一个更改提交到远程仓库，但后来你发现提交信息有一个拼写错误，或者你忘记在最近的提交中添加一行。  
你该如何编辑这个提交？这篇教程将为你解答。

## 在推送到 Github 后修改最近的提交信息
如果你不想打开文件，可以通过以下方式进行修改：
* 输入 `git commit --amend -m "然后是你新的提交信息"`
* 运行 `git push origin <branch-name>` 将更改提交到仓库。

注意：如果只输入 `git commit --amend`，则会打开文本编辑器，提示你编辑提交信息。  
添加 `-m` 标志可以防止这种情况。

## 修改单个提交

那么，如果我们忘记对文件做一个小的更改，比如更改一个单词，而且我们已经将提交推送到远程仓库了，怎么办呢？

以下是我的提交日志：
```
g56123f 创建 bot 文件
a2235d 更新 contributor.md
a5da0d 修改 bot 文件
```
假设我忘记在 bot 文件中添加一个单词。

有两种方法可以解决这个问题。第一种方法是创建一个包含更改的新提交，如下所示：
```
g56123f 创建 bot 文件
a2235d 更新 contributor.md
a5da0d 修改 bot 文件
b0ca8f 添加 bot 文件中的单词
```
第二种方法是修改 `a5da0d` 提交，添加这个新单词，并将其作为一个提交推送到 Github。  
第二种方法更好，因为这只是一个小改动。

为了实现这一点，我们可以按照以下步骤操作：
* 修改文件。在本例中，我会修改 bot 文件，加入之前遗漏的单词。
* 接下来，使用 `git add <filename>` 将文件添加到暂存区。

通常，在将文件添加到暂存区之后，我们会运行 git commit -m "我们的提交信息"`, 对吧？  
但由于我们希望修改的是上一个提交，我们应该运行：

* `git commit --amend`  
  这会打开文本编辑器，提示你编辑提交信息。你可以选择保留原来的信息，也可以修改它。
* 退出编辑器
* 使用 `git push origin <branch-name>` 推送更改

这样，两个更改就会合并为一个提交。

## 修改远程提交

如果你想修改的提交已经推送到远程，修改该提交将导致你的本地历史与远程分支不同步（因为你实际上创建了一个新提交并替换了已修改的提交）。  
由于你希望更改远程的提交，你需要覆盖远程仓库中的历史记录。为了实现这一点，请按照上述相同的步骤操作，但在推送提交到远程时使用强制推送。

> **警告**  
> 强制推送到远程将覆盖（并丢弃）远程上的更改，只保留你推送的提交。其他团队成员在此期间对远程的更改也将被覆盖。

这是如何修改远程仓库中最后一次提交的方法：

```bash
git add <your changed files>
git commit --amend -m "然后是你的新提交信息"
git push --force
```

>使用 `--force-with-lease` 比 `--force` 更安全，它可以避免覆盖远程分支上其他人的更改（如果你不打算这么做）。