ZBLOG

git rebase -i

git rebase -i(交互式 rebase)是一个强大的 Git 命令,用于修改提交历史。你可以用它来重新排序、合并、编辑、删除或拆分提交

以下是详细的使用方法和常见场景:


1. 基本命令

git rebase -i [起点提交或分支]
  • [起点提交或分支]:可以是提交哈希、分支名或相对引用(如 HEAD~3)。
  • 如果不指定起点,默认是当前分支的 upstream 分支或 HEAD

示例

# 修改最近 3 次提交
git rebase -i HEAD~3

# 基于远程分支交互变基(常用)
git rebase -i origin/main

2. 操作步骤

  1. 执行命令后,会打开一个文本编辑器(如 Vim),显示提交列表和操作指令:
    
    pick a1b2c3d Commit message A
    pick d4e5f6g Commit message B
    pick g7h8i9j Commit message C
    
  2. 每行前面的 pick 表示对该提交执行的操作,你可以替换为其他命令(见下文)。
  3. 保存并退出后,Git 会按顺序执行你指定的操作。

3. 常用操作命令

命令 缩写 说明
pick p 保留该提交(不做修改)
reword r 保留提交但修改提交信息
edit e 暂停 rebase,允许修改提交内容(如添加文件)
squash s 将该提交合并到前一个提交中(并合并提交信息)
fixup f 类似 squash,但丢弃该提交的日志信息
drop d 删除该提交(从历史中移除)
exec x 执行 shell 命令

4. 常见使用场景

合并多个提交为一个

pick a1b2c3d Feat: add user login
squash d4e5f6g Fix: typo in login page
squash g7h8i9j Refactor: clean up code

保存后,Git 会将三个提交合并为一个,并让你编辑新的提交信息。


修改某次提交的日志

pick a1b2c3d Feat: add user login
reword d4e5f6g Fix: typo in login page   # 修改这次提交的信息
pick g7h8i9j Refactor: clean up code

删除某次提交

pick a1b2c3d Feat: add user login
drop d4e5f6g Fix: typo in login page   # 删除这个提交
pick g7h8i9j Refactor: clean up code

调整提交顺序

直接调整行顺序即可(但需注意依赖关系)。


拆分提交

使用 edit 暂停在某个提交,然后:

git reset HEAD~   # 撤销上次提交,保留改动在工作区
git add -p        # 分批添加改动到暂存区
git commit -m "New commit A"
git commit -m "New commit B"
git rebase --continue

⚠️注意事项:

  1. 不要重写已推送的历史:如果这些提交已经推送到远程仓库,重写历史会导致冲突,需要强制推送(git push --force-with-lease),但这会影响其他协作者。
  2. 冲突处理:在 rebase过程中可能会出现冲突,解决后使用:
    
    git add .
    git rebase --continue
    
    如果想放弃 rebase:
      
    git rebase --abort  
    
  3. 备份分支:不确定时先创建新分支备份:
      
    git checkout -b backup-branch  
    

如果你有具体需求(例如只想推送一笔提交),可以结合 git rebase -i + git push origin <commit>:refs/for/branch


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24275

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?