git rebase -i 修改提交

本文介绍如何使用Git的rebase-i命令来修改历史提交,包括如何选择要修改的提交、如何编辑提交信息以及如何解决可能出现的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

教程3 改写提交!

6. 用rebase -i 修改提交

为了节省时间,这个教程使用现有的历史记录作为本地数据库。

从这里下载

我们进入stepup-tutorial/tutorial6目录。本地端的历史记录的状态如下图显示。我们在这里修改「添加commit的讲解」的内容。

数据库的历史记录

用rebase -i ,首先选择要修改的提交。

$ git rebase -i HEAD~~

打开文本编辑器,将看到从HEAD到HEAD~~的提交如下图显示。

pick 9a54fd4 添加commit的说明
pick 0d4a808 添加pull的说明

# Rebase 326fc9f..0d4a808 onto d286baa
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

将第一行的“pick”改成“edit”,然后保存并退出。将会显示以下内容,修改过的提交呈现退出状态。

Stopped at d286baa... 添加commit的说明
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

打开sample.txt,适当地修改“commit的讲解”部分。

连猴子都懂的Git命令
add 把变更录入到索引中
commit 记录索引的状态
pull 取得远端数据库的内容

用commit --amend保存修改。

$ git add sample.txt
$ git commit --amend

现在已经commit,但是rebase操作还没结束。若要通知这个提交的操作已经结束,请指定 --continue选项执行rebase。

$ git rebase --continue

Note

这时,有可能其他提交会发生冲突, 请修改冲突部分后再执行add和rebase --continue。这时不需要提交。如果在中途要停止rebase操作,请在rebase指定--abort选项执行,这样就可以抹去并停止在rebase的操作。

提交的修改完成了。如果要把多个提交修改成edit,下一个要修改的提交会退出,请执行同样的修改。

Note

实际上,在rebase之前的提交会以ORIG_HEAD之名存留。如果rebase之后无法复原到原先的状态,可以用git reset --hard ORIG_HEAD复原到rebase之前的状态。


from: http://backlogtool.com/git-guide/cn/stepup/stepup7_6.html

### 如何使用 `git rebase -i` 命令合并多个提交记录 #### 准备工作 确保当前位于想要进行提交合并的 Git 仓库内。 #### 发起交互式变基 为了合并最近 n 次的提交,可以在命令行输入如下指令: ```bash git rebase -i HEAD~n ``` 这里的 `HEAD~n` 表示从最新的提交向前数第 n 个父节点作为起点开始变基过程[^2]。 #### 处理交互界面 上述命令会启动默认文本编辑器(通常是 Vi 或 Vim),显示一系列待处理的提交项列表。每一条目之前都有一个动作关键字,默认是 `pick`,表示保留该提交不变。如果希望合并某些提交,则需将这些条目前的关键字改为 `squash` 或者简称 `s`,这意呈着“压平”,即把这些选中的提交与其前一提交合并在一起形成一个新的单一提交[^5]。 对于每一个被标记为 squash 的提交,在保存并退出编辑器之后会被询问是否修改提交信息以及之前的提交描述也会随之更新。此过程中若有任何文件发生冲突则需要手动解决冲突后再继续变基流程;具体做法是在解决了所有冲突后运行下面两条命令: ```bash git add . git rebase --continue ``` 当遇到错误提示无法完成某一步骤时,可以通过执行 `git rebase --edit-todo` 来修正未完成的任务列表,并尝试再次推进变基进程[^3]。 #### 完成变基 一旦所有的提交都按照预期进行了调整并且没有任何剩余的冲突等待解决,那么整个变基操作就完成了。最终的结果就是原本分散的小型提交已经被整理成了更简洁明了的历史记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值