我们可能比较熟悉并且常用的命令是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.
简单来讲,分以下几步完成:
- git rebase -i HEAD~n
- 修改文件
- git add暂存修改后的文件
- git commit --amend修改commit message并将文件提交到这个commit中
- 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的方法,这样的原理简单,但操作比较麻烦,就不介绍了。