git rebase
基于VSCode操作git
在VSCode 中打开Git命令行
1 | Ctrl + ` |
配置 VS Code 作为 Git 的默认编辑器
为了让 git rebase -i 等操作能在 VS Code 中打开编辑界面,需要执行以下两条命令:
1 | git config --global core.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 | git config --get core.editor |
输出分别应该是code --wait或带完整路径的Code.exe --wait。
提示
core.editor:决定 git commit、git merge、git 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 | git config --global i18n.logoutputencoding utf-8 |
- 设置提交信息编码:
1 | git config --global i18n.commitencoding utf-8 |
- 设置终端输出编码(如果终端也乱码):
1 | git config --global core.quotepath false |
注意: 修改完配置后,建议重启 VS Code 以确保设置生效。
检查 VS Code 的编码设置
- 确保 VS Code 自身也是用 UTF-8 来打开和显示文件的。
- 打开 VS Code 的设置(快捷键 Ctrl + ,)。
- 在搜索框中输入
files.encoding。 - 确认其值被设置为
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 |
注意:变基前需要将未暂存的文件添加到暂存区或删除文件,否则无法变基
变基内容
- 将
57c24e0合并到0d7fb34(通过调整提交顺序 +squash) - 将
86ddd79合并到32acc0b(通过调整提交顺序 +squash) - 先修改
c2a51b1的文件内容(通过edit暂停变基)
变基步骤
如果需要变基,前面6个需要变动,最好在变基上面多加1个作为父节点。如下时我要变基内容,这是没有变基前的顺序,通过下面的命令(选一种就可以)选择变基
1 | 352483c (HEAD -> develop) 暂时存储 |
写法一
1 | git rebase -i HEAD~7 |
的核心含义是**“对当前分支最近的7 次提交进行交互式变基”**
写法二
1 | git rebase -i bb82405 |
输入命令后,可以看到如下图片所示:
按以下规则修改文件:
- 将
86ddd79移动到32acc0b上方(紧邻其后),并改为squash。 - 将
57c24e0移动到0d7fb34上方(紧邻其后),并改为squash。 - 将
c2a51b1改为edit(暂停修改文件)。
开始变基
有一个明显的按钮,通常写着 Start Rebase 或 Begin Rebase。如下图所示:
点击后,GitLens 才会将你选好的这些操作(pick, edit, squash)写入到 .git/rebase-merge/git-rebase-todo 文件中;
等待 VS Code 弹出新窗口
窗口会自动弹出如下所示:
删除所有你不需要的行,只保留你想要显示的最终描述。
建议将文件内容修改为下面这样(删除了所有 # 开头的注释行,并将两句话合并为一句):
操作说明:
- 删除
# This is a combination...到# Changes to be committed...的所有行。 - 将原来的两行
fix: ...删掉。 - 写入上面那行新的合并描述(或者你想保留原来的两句也可以,只要没有
#号就行)。
保存并关闭
- 按
Ctrl + S保存文件。 - 按
Ctrl + W关闭当前这个文件标签页。
修改完成前面的功能后,会出现如下提示
1 | You can amend the commit now, with |
接下来就可以修改 c2a51b1 的文件内容
修改 c2a51b1 的文件内容
点击如图所示位置,打开需要修改的文件:
就可以开始修改内容
修改提交
修改好内容后,点击上图位置中的继续按钮,会出现如图所示,直接点击是,就完成了对文件的修改。
或者,你也可以在终端中执行:
1 | git commit --amend --no-edit |
继续变基
- 修改提交完成后,你需要告诉 Git 继续执行剩下的变基操作。
- 打开 VS Code 的 终端(
Terminal > New Terminal)。 - 输入以下命令并回车:
1 | git rebase --continue |