git-rebase简明用法

2024-09-13
1.0.0
1614字, 约5分钟

本文主要介绍git-rebase简明用法,以便快速合并无价值的提交日志。

一、背景

日常工作中经常使用Git,但一直没有用过git-rebase。现在需要向Github中的开源项目提交代码,而自己的开发分支中,充斥着大量无意义的提交日志。这样着实不美观,也不利于Code ReviewRollback

因而,不得不研究一下git-rebase用法,以便快速合并无价值日志。本文仅提供一种简明日志合并方式。

二、前提

  1. 远程分支没有新的提交

  2. 本地分支需要git pull至最新

  3. 不要用git-rebase处理已经被第三方引用的提交

三、基本指令

  1. -i:交互式修改,即弹出编辑界面

  2. --ignore-date:更新提交时间为当前时间,与-i不兼容,需要分开执行

  3. 指定commitID:修改这个提交之前的所有提交(不包含该提交)

  4. 指定HEAD~n:修改最新的n个有代码提交

  5. 编辑界面只允许调整有代码提交日志,自动跳过并删除无代码提交日志,如Merge BranchMerge pull request生成的提交

  6. 建议配置快捷指令,同时更新提交日期并编辑日志

# 基本用法
CMD> git rebase --ignore-date 4fbc059  # 建议: 更新提交日期(不包含该提交)
CMD> git rebase -i 2bc8cd7             # 建议: 更新提交日志(不包含该提交)
CMD> git rebase -i HEAD~5              # 更新前5个有代码提交

CMD> git rebase --abort                # 建议: 变基失败后回退

# 快捷指令 - 建议
CMD> cat ~/.gitconfig
[alias]
    rb = "!cd \"${GIT_PREFIX:-.}\" && git rebase --ignore-date \"$1\" && git rebase -i \"$1\" #"
    rc = rebase --abort

CMD> git rb 4fbc059  # 更新提交日期和并编辑日志
CMD> git rc          # 失败后回退

四、交互编辑

  • 常用方案
    • 首行reword, 其它行fixup,保存后弹出界面重新编写日志
    • 首行pick, 其它行squash, 保存后弹出界面保留全部日志,按需编辑
  • 常用指令
    • p, pick: 使用提交
    • r, reword: 使用提交,编辑日志,保存后会弹出日志编辑界面
    • s, squash: 使用提交,保留日志,给pickreword使用。保存后会弹出日志编辑界面
    • f, fixup: 使用提交,丢弃日志
  • 基本不用
    • e, edit: 使用提交,编辑日志,编辑内容
    • 丢弃提交: 注释或者删除行即可
    • 日志顺序重排: 调整行顺序即可

五、Vim快速编辑

Linux平台弹出的编辑界面一般为Vim编辑器,如果提交很多,建议使用块编辑技巧快速调整。

  • 基本步骤
    1. 先删除:ctrl+v -> 10gg -> fk -> d
    2. 再插入:ctrl+v -> 10gg -> shift+i -> 插入 -> ESC ESC
  • 指令解释
    • ctrl+v: 开启块编辑模式
    • 10gg: 光标移动至第10行,也可以使用方向键选择范围
    • fk: 光标向右移动至第一个k字符
    • d: 删除选择内容
    • shift+i: 块编辑模式下插入内容,插入时不要键入BackSpaceDelete,会导致块编辑中断
    • ESC ESC: 块编辑模式插入完成标识

六、失败后继续

# 不建议,很繁琐
vim .git/rebase-merge/git-rebase-todo  # 再次编辑配置
git commit --amend                     # 编辑最新提交
git rebase --continue                  # 解决问题后继续变基

参考链接


上一篇: tincVPN简明用法

Comments

Contents