Git 交互式变基操作指南(以最近 5 次提交为例)

发布于:2025-07-10 ⋅ 阅读:(29) ⋅ 点赞:(0)

Git 交互式变基与分支 Rebase 操作指南

一、Git 交互式变基操作(以最近 5 次提交为例)

目标

通过 git rebase -i HEAD~5 命令对最近 5 次提交进行以下操作之一:

  • 合并多个提交
  • 修改提交信息
  • 删除不需要的提交
  • 重新排序提交顺序

操作流程概览

步骤 操作
Step 1 执行命令进入交互式变基界面
Step 2 在编辑器中选择每个提交的操作
Step 3 保存并退出编辑器
Step 4 如需修改提交信息或内容,继续操作
Step 5 完成变基后推送更新

Step 1: 执行命令进入交互式变基界面

在终端运行:

git rebase -i HEAD~5

这会打开一个临时文件,列出最近的 5 条提交记录,如下所示:

pick abc1234 feat: add feature A
pick def5678 fix: bug in feature A
pick ghi9012 docs: update README
pick jkl0123 style: format code
pick mno4567 chore: clean up

# 命令说明:
# p, pick = 使用该提交
# r, reword = 修改提交信息
# e, edit = 修改提交内容
# s, squash = 合并到前一个提交
# f, fixup = 类似 squash,但丢弃提交信息
# d, drop = 删除该提交

Step 2: 编辑提交操作方式

你可以根据需要修改每行前面的 pick 字段。例如:

示例:合并前两个提交
pick abc1234 feat: add feature A
squash def5678 fix: bug in feature A
pick ghi9012 docs: update README
pick jkl0123 style: format code
pick mno4567 chore: clean up
示例:修改第一个提交的信息
reword abc1234 feat: add feature A
pick def5678 fix: bug in feature A
...
示例:删除最后一次提交
pick abc1234 feat: add feature A
pick def5678 fix: bug in feature A
pick ghi9012 docs: update README
pick jkl0123 style: format code
drop mno4567 chore: clean up

Step 3: 保存并退出编辑器

  • 如果你使用的是 Vim:

    • Esc
    • 输入 :wq 并回车
  • 如果你使用的是 VS Code 或其他编辑器:

    • 直接保存并关闭文件

Step 4: 修改合并后的提交信息(如使用了 squash

Git 会再次弹出编辑器窗口,显示所有被合并提交的信息:

# This is a combination of 2 commits.
# This is the 1st commit message:

feat: add feature A

# This is the commit message #2:

fix: bug in feature A

你可以将其修改为:

feat: add user login flow

然后保存并退出。


Step 5: 完成变基并推送更新

运行以下命令完成变基:

git rebase --continue

如果你没有更多冲突或修改,则可以将更新推送到远程分支:

git push origin dengping_dev --force

⚠️ 注意:由于你修改了提交历史,必须使用 --force 推送。


二、Git 从 master 分支 rebase 到 dev 分支的操作指南

目标

将当前分支(例如 dev)基于远程的 master 分支进行变基,以确保你的本地提交历史是建立在最新的 master 提交之上。


操作流程概览

步骤 操作
Step 1 确保工作区干净
Step 2 获取远程最新提交
Step 3 切换到目标分支(如 dev
Step 4 执行 git rebase master 命令
Step 5 解决冲突(如有)
Step 6 完成变基并推送更新

Step 1: 确保工作区干净

在执行 rebase 前,请确保你的工作目录中没有未提交的更改。你可以通过以下命令查看状态:

git status

如果存在修改但未提交的内容,可以选择提交或暂存它们:

git add .
git commit -m "Save current changes"

或者使用 git stash 暂存更改:

git stash

Step 2: 获取远程最新提交

确保你拥有远程仓库的最新内容:

git fetch origin

这将拉取远程所有分支的最新信息,包括 master


Step 3: 切换到目标分支(如 dev

切换到你想 rebase 的目标分支,例如 dev

git checkout dev

Step 4: 执行 git rebase master 命令

运行以下命令,将 dev 分支基于 master 进行变基:

git rebase master

Git 将尝试自动将 dev 分支上的提交重新应用在 master 的最新提交之后。


Step 5: 解决冲突(如有)

如果在 rebase 过程中出现冲突,Git 会暂停变基并在冲突文件中标记冲突部分。

冲突示例:
<<<<<<< HEAD
# master 上的内容
=======
# dev 分支上的内容
>>>>>>> abc1234... commit message
处理步骤:
  1. 打开提示冲突的文件,手动解决冲突。
  2. 标记冲突已解决:
git add <filename>
  1. 继续变基过程:
git rebase --continue

重复此过程直到所有冲突解决完毕。


Step 6: 完成变基并推送更新

当变基完成后,你可以将更新后的提交推送到远程仓库:

git push origin dev --force

⚠️ 注意:由于 rebase 改变了提交历史,因此需要使用 --force 强制推送。


总结

  • 适用场景:当你希望将本地分支的更改基于最新的 master 分支时,可以使用 git rebase master
  • 注意事项:避免对已经推送到远程的公共分支进行 rebase,以免影响其他开发者的工作。
  • 优势:保持提交历史线性清晰,避免合并提交带来的混乱。


网站公告

今日签到

点亮在社区的每一天
去签到