git rebase命令详解
特别说明:git rebase命令针对的是本地环境已暂存(即已经使用了git commit命令)未推送(未使用git push命令)到远端仓库的代码,对于已经推送到了远端仓库的代码,常规下的git rebase命令是不起作用的,下述所有的示例针对的是本地环境已暂存未推送的这种情况,其代码编译工具为Visual Studio Code。
例如,本地环境的hotfix/0.0.1分支上对于demo.py文件在连续的时间段内修改了三次同时也提交了三次,如下图所示:

假设提交备注为“测试六”的这次提交是个错误的,我们并不想推送到远程,这个时候可以在终端中先输入git rebase -i HEAD~1命令,这时终端会进入到当前版本的前1个版本的查看页面:
git rebase -i HEAD~1
接着在英文输入状态下按下i键即可进入到其编辑界面,将下方的pick修改为drop,如下图所示:

再按下Esc,输入wq保存退出,即可看到暂存区的已提交的代码已经被删除了。

如果在使用git rebase命令的过程中出现了错误的话,则可以使用git rebase –abort放弃掉关于git rebase命令所有的一切操作。
当前Visual Studio Code已经安装了gitflow插件,如下图所示:

我们可以使用VSCode来实现上述的这种功能,选择提交备注为“测试四”的这次提交,鼠标点击右键在右侧弹出窗中找到“Rebase Current Branch onto Commit”,并点击进去:

在界面的中间方选择“Interactive Rebase”并点击

将备注为“测试六”这条数据的pick选项修改为drop,最后点击START REBASE

就可以看到该条暂存区的提交记录已经删除了,并且其所对应的文件已经恢复到未提交(commit)前的记录。

例如,本地环境的hotfix/0.0.1分支上对于demo.py文件在连续的时间段内修改了三次同时也提交了三次,如下图所示:

假设提交备注为“测试六”的这次提交,我想修改其提交备注,将其修改为“提交测试六”,如果是直接使用命令操作的话,则先在终端中输入“git rebase -i HEAD~1”,接着会进入到一个编辑页面:
git rebase -i HEAD~1

将上图中的pick修改为reword以后,保存退出后,终端会自动进入到下面这么一个编辑界面

将上述编辑界面中的“测试六”修改为“提交测试六”,再次保存退出,即可看到提交记录里面的备注信息已被修改。

当然也可以在gitflow插件中实现这一个需求,将提交备注为“提交测试六”这条数据修改为reword,然后点击START REBASE:

同样在终端中会弹出一个编辑界面,如下图所示:

将提交备注“提交测试六”修改为“测试六”,再次保存退出,即可看到提交记录里面的备注信息已被修改。

前面已经使用了drop和reword选项命令,基本上对git rebase命令有了一个全新的认识
pick:保留该commit
reword:保留该commit,可以修改commit的注释
squash:将该commit和前面一个commit合并
fixup:将该commit和前面一个commit合并,但不保留该提交的注释信息
drop:丢弃该commit
总结:git rebase 将多次提交合并为一次提交时,可以先从当前分支打一个分支出来,然后再根据实际场景选择性的使用git rebase的相关命令进行合并,最后再使用git push -f(慎用)命令将代码推送到远端,最后再切换回原分支,进行merge合并操作。
更多推荐
所有评论(0)