Git如何修改已提交Change

本文介绍如何使用Git命令修改已提交的历史记录,特别是如何利用git rebase -i HEAD~n命令来编辑之前的提交,并通过实例演示具体步骤。

我们可能比较熟悉并且常用的命令是git --amend来修改上次提交的commit message, 如果要修改再以前的commit,这个命令必须配合git rebase -i HEAD~n 命令来实现。注意“n"表示你列出自上次提交后最近的几次提交,此命令会列出最近n次的提交,你需要将”pick"改成“s"来表示要修改这个commit,然后将修改后的文件用git add加到暂存区,执行git --amend修改变当前commit,最后执行git rebase --continue接受此此修改,你所在的当前分支会自动rebase这个change,如果后面有commit也修改到这个文件,那么git会要求你去resolve conflicts.

简单来讲,分以下几步完成:

  1. git rebase -i HEAD~n
  2. 修改文件
  3. git add暂存修改后的文件
  4. git commit --amend修改commit message并将文件提交到这个commit中
  5. git rebase --continue
下面通过一个实例来讲解:


分支push_apac最近有8个commit,在代码code-review的时候发现commit "Support Quick Spell for Hydra Pinyin & JPN keyboard"需要修改

文件GUI_SearchInterface.hpp的下面代码需要移除
#if( SEARCH_MULTI_ENTRY_SUPPORT )
            //----------------------------------------------------------------------------
            //! performMultiEntrySearch
            //!
            //! @return the Search Result List
            //----------------------------------------------------------------------------
            ....
#endif

执行git rebase -i HEAD~4, 列出最近4次commit
gi

将第一个commit的"pick"改成”e",表示要编辑当前的commit

Git出现下面的提示


修改文件GUI_SearchInterface.hpp

执行git add GUI_SearchInterface.hpp

执行git commit --amend

执行git rebase --continue


这样就完成了在修改之前提交commit的目的,很快速。当然还有一种方法就比较麻烦,就是采用新建临时分支,然后使用git cherry-pick的方法,这样的原理简单,但操作比较麻烦,就不介绍了。

### 修改提交Git Commit Message 在 Git 中,可以通过多种方式修改已经提交的 commit message。以下是具体的操作方法: #### 方法一:使用 `git commit --amend` 修改最近一次提交的消息 当需要更改最新的 commit message 时,可以使用命令 `git commit --amend`[^2]。此操作会打开默认编辑器,允许用户重新编写该次提交的信息。 如果希望直接指定新的消息而不进入编辑器,则可以在命令中附加 `-m` 参数: ```bash git commit --amend -m "新版本的Commit Message" ``` 注意:这种方法仅适用于尚未推送到远程仓库或者未与其他开发者共享分支的情况。一旦推送出去再做此类改动可能会引起冲突或其他问题[^1]。 #### 方法二:利用交互式 rebase (`interactive rebase`) 修改任意历史记录中的某条或多条评论 对于更早之前的 commits 而言,“--amend”选项就无能为力了;这时就需要借助于交互式的变基功能来完成任务。执行如下指令启动过程: ```bash git rebase -i HEAD~N ``` 这里 N 表示想要回溯查看/调整的数量。例如要改变倒数第三个及其之后所有的提交描述语句的话就是 `HEAD~3`. 随后会出现一个列表展示这些选定范围内的每一次变动,默认行为都是 “pick”。找到待修正的那一项并将前面的关键字由 'pick' 替换成'reword'(也可以简化写成'r')即可达到目的[^4]。 保存退出后系统自动开启另一个文本界面让我们输入期望的新标题内容以及可选的身体部分解释文字等内容。 最后一步可能还需要解决可能出现的一些合并冲突等问题才能顺利完成整个流程。 --- ### 注意事项 - 如果当前 commit 是为了撤销之前的一个错误提交,并且这两个提交处于不同 release 版本下,那么当前 commit 将显示在 changelog 的 Reverts 部分[^5]。 - 对于那些已经被 push 到远端服务器上的提交来说,任何对其 metadata (比如message)所做的变更都要求强制更新(push),即加上参数 '--force' 或者 '-f'[^(隐含)]. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值