git rebase

基于VSCode操作git

在VSCode 中打开Git命令行

1
Ctrl + `

配置 VS Code 作为 Git 的默认编辑器

为了让 git rebase -i 等操作能在 VS Code 中打开编辑界面,需要执行以下两条命令:

1
2
git config --global core.editor "code --wait"
git config --global sequence.editor "code --wait"

执行完后不需要重启电脑,‌关闭当前终端,重新打开一个新的终端‌(或者直接在当前终端里再试),再执行别的命令

加了--global‌

写入你用户主目录下的.gitconfig 文件(Windows 在C:\Users\你的用户名\.gitconfig)。
作用范围‌:你电脑上的‌所有‌ Git 仓库都会使用 VS Code 作为编辑器。

不加--global(即默认--local

写入当前项目根目录下的 .git/config 文件。
作用范围‌:只对这个‌当前‌仓库有效。切换到其他项目再用 git rebase -i 时,就不会弹出 VS Code,还是会用 Git 的默认编辑器。

配置方式 作用范围 存储位置
git config --global 对当前电脑上‌所有‌ Git 仓库生效 用户主目录 .gitconfig 文件
git config(默认 --local 仅对‌当前这一个‌仓库生效 当前项目 .git/config 文件

验证配置是否生效

在终端执行:

1
2
git config --get core.editor
git config --get sequence.editor

输出分别应该是code --wait或带完整路径的Code.exe --wait

提示

core.editor‌:决定 git commitgit mergegit tag 等操作弹出的编辑器。
sequence.editor‌:专门控制 git rebase -i 弹出的编辑器。

Git 的配置是有优先级的,优先级顺序为:项目级 (--local) > 全局级 (--global) > 系统级 (--system)

git rebase -i变基显示乱码

修改如下功能

(命令行中乱码)修改 Git 配置

Git 在 Windows 上有时会默认使用 GBK 编码处理日志,而 VS Code 期望的是 UTF-8。请尝试在终端中运行以下命令来强制 Git 使用 UTF-8:

  1. 设置提交日志编码:
1
git config --global i18n.logoutputencoding utf-8
  1. 设置提交信息编码:
1
git config --global i18n.commitencoding utf-8
  1. 设置终端输出编码(如果终端也乱码):
1
git config --global core.quotepath false

注意: 修改完配置后,建议重启 VS Code 以确保设置生效。

检查 VS Code 的编码设置

  1. 确保 VS Code 自身也是用 UTF-8 来打开和显示文件的。
  2. 打开 VS Code 的设置(快捷键 Ctrl + ,)。
  3. 在搜索框中输入 files.encoding
  4. 确认其值被设置为 utf8

处理终端编码问题(针对 Windows 用户)

如果你使用的是 Windows 系统,终端的默认编码可能是 GBK (代码页 936),这与 UTF-8 不兼容。
临时解决方案: 在 VS Code 的终端中,先执行 chcp 65001 命令,将当前终端的代码页切换为 UTF-8,然后再执行 git rebase -i。
根本解决方案: 将 VS Code 的默认终端设置为 Git Bash。Git Bash 原生支持 UTF-8,能从根本上避免这类编码冲突。你可以在 VS Code 的终端面板点击“+”号旁边的下拉箭头,选择“选择默认配置文件”,然后选择 Git Bash。

命令

查看提交历史的常用命令

查看提交历史6条记录

1
git log --oneline -8

查看提交历史全部记录,没有翻到最后一条历史记录需要退出,直接按q

1
git log --oneline

注意:变基前需要将未暂存的文件添加到暂存区或删除文件,否则无法变基

变基内容

  1. 57c24e0 合并到 0d7fb34(通过调整提交顺序 + squash
  2. 86ddd79 合并到 32acc0b(通过调整提交顺序 + squash
  3. 先修改 c2a51b1 的文件内容(通过 edit 暂停变基)

变基步骤

如果需要变基,前面6个需要变动,最好在变基上面多加1个作为父节点。如下时我要变基内容,这是没有变基前的顺序,通过下面的命令(选一种就可以)选择变基

1
2
3
4
5
6
7
352483c (HEAD -> develop) 暂时存储
57c24e0 fix:
86ddd79 fix:
c2a51b1 fix:
0d7fb34 fix:
32acc0b fix:
bb82405 feat:

写法一

1
git rebase -i HEAD~7

的核心含义是**“对当前分支最近的7 次提交进行交互式变基”**

写法二

1
git rebase -i bb82405

输入命令后,可以看到如下图片所示:

按以下规则修改文件:

  • 86ddd79 移动到 32acc0b 上方(紧邻其后),并改为 squash
  • 57c24e0 移动到 0d7fb34 上方(紧邻其后),并改为 squash
  • c2a51b1 改为 edit(暂停修改文件)。

开始变基

有一个明显的按钮,通常写着 Start RebaseBegin Rebase。如下图所示:

点击后,GitLens 才会将你选好的这些操作(pick, edit, squash)写入到 .git/rebase-merge/git-rebase-todo 文件中;

等待 VS Code 弹出新窗口

窗口会自动弹出如下所示:

删除所有你不需要的行,只保留你想要显示的最终描述。

建议将文件内容修改为下面这样(删除了所有 # 开头的注释行,并将两句话合并为一句):

操作说明

  1. 删除 # This is a combination...# Changes to be committed... 的所有行。
  2. 将原来的两行 fix: ... 删掉。
  3. 写入上面那行新的合并描述(或者你想保留原来的两句也可以,只要没有 # 号就行)。

保存并关闭

  1. Ctrl + S 保存文件。
  2. Ctrl + W 关闭当前这个文件标签页。

修改完成前面的功能后,会出现如下提示

1
2
3
4
5
6
7
You can amend the commit now, with

git commit --amend

Once you are satisfied with your changes, run

git rebase --continue

接下来就可以修改 c2a51b1 的文件内容

修改 c2a51b1 的文件内容

点击如图所示位置,打开需要修改的文件:

就可以开始修改内容

修改提交

修改好内容后,点击上图位置中的继续按钮,会出现如图所示,直接点击,就完成了对文件的修改。

或者,你也可以在终端中执行:

1
git commit --amend --no-edit

继续变基

  • 修改提交完成后,你需要告诉 Git 继续执行剩下的变基操作。
  • 打开 VS Code 的 终端Terminal > New Terminal)。
  • 输入以下命令并回车:
1
git rebase --continue

基于VSCode的变基完成