应用场景一:在连续多次commit中丢掉其中的某一次提交
(1)应用场景:
在连续多次提交之后,其中依次修改由于某种原因比如引入重大bug但是又不知道怎么修复有非常紧急的情况下,想丢掉那一次commit,但是在那一次commit之后又提交了许多新功能的开发,如果使用reset命令恢复,则后面的许多新功能代码又要重新开发一遍,在这种场景下,就该git rebase出场了
(2)首先在一个文件夹下初始化一个目录演示,然后分别创建文件master_01,master_02,master,master03,master_04,分四次提交,如下
[root@hecs-73797 demo]# git init
已重新初始化已存在的 Git 仓库于 /root/demo/.git/
[root@hecs-73797 demo]# touch file01
[root@hecs-73797 demo]# git add .
[root@hecs-73797 demo]# git commit -m 'add file01'
[分离头指针 44e7b32] add file01
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 file02
[root@hecs-73797 demo]# touch file02
[root@hecs-73797 demo]# git add .
[root@hecs-73797 demo]# git commit -m 'add file02'
[分离头指针 5f52890] add file02
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file02
[root@hecs-73797 demo]# touch file03
[root@hecs-73797 demo]# git add .
[root@hecs-73797 demo]# git commit -m 'add file03'
[分离头指针 7b7fd47] add file03
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file03
[root@hecs-73797 demo]# touch file04
[root@hecs-73797 demo]# git add .
[root@hecs-73797 demo]# git commit -m 'add file04'
[分离头指针 ed99af0] add file04
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file04
[root@hecs-73797 demo]# git log --pretty=oneline --graph
* 895c6f1e8fd01455fa2f9677b87a285e1a032203 (HEAD) add file04
* 6326372832f092aca25181b00807fa1c6343f57c add file03
* 9e97035358c51ddc6d9b722c7afbf4ced0950e5d add file02
* 90bc050adf779a71aa8344e6b413c8ed369c90f4 add file01
(3)比如此时我只想丢弃add file03的提交
#找到想要丢弃之前的那一个commit节点,为了演示,我用的是第一个
git rebase -i 90bc050
打开如下窗口,此时只需要将pick修改为drop即可做到将file03的提交丢弃,修改后保存退出即OK了
注意:Centos7默认安装的是git version 1.8.3.1,这个版本是没有drop
这个参数的,建议升级到最新的版本
应用场景二:将连续多次提交合并为一个提交
git rebase -i 90bc050
然后将最后两次的pick修改为squash即可,如下,表示将后面两次的提交合并到前一次提交
保存后弹出如下窗口,此时需要设置合并后的提交信息,默认的是把三次提交的信息合并在一起,这里可以编辑,以#开头的是注释,不是以#开头的即为提交信息
比如这里把提交信息修改为: add file02,file03,file04
(2)此时查看git log 历史提交信息,如下,已经发生了变化,只有两次提交记录,而且第二次提交记录的信息也已经发生了变化
[root@localhost demo]# git log --pretty=oneline --abbrev-commit
bff95d6 (HEAD) add file02,file03,file04
90bc050 add file01