代码被revert,你pull了master,代码没了,咋回来?

问题场景

实际工作中,在上线时,你的新功能代码都是在gitlab上提交merge to master的请求,拥有merge权限的领导通过后,你的代码才合到master。好,QA开始上线了你的代码,这时 啪,啪,报警了,代码有问题。领导revert了你的代码以保证master分支的正确。这时,你的分支pull了master后,你发现你分支上的新功能代码都没有了!!咋找回来

本文从实战角度来解决这个问题

条件

  1. 假设你已经有了一个git项目: test-git,并且有两个分支: master,test

实战

在test分支,你创建了一个文件welcome,文本:hi git。并git commit -m ‘测试git revert’提交

当前,master,test的内容如下

1
2
3
~/tt/test-git>>master $ ll
drwxr-xr-x 3 tt staff 96B 5 8 20:54 test
-rw-r--r-- 1 tt staff 16B 8 1 19:55 test3.log

1
2
3
4
5
6
7
~/tt/test-git>>test $ ll
drwxr-xr-x 3 tt staff 96B 5 8 20:54 test
-rw-r--r-- 1 tt staff 16B 8 1 19:55 test3.log
-rw-r--r-- 1 tt staff 7B 8 1 20:19 welcome

~/tt/test-git>>test $ cat welcome
hi git

现在,向master提交merge to master请求,如下图
todo

,领导merge后,线上出现问题,领导revert了这次提交的代码。然后回到你的代码分支,执行git merge origin/master

1
2
3
4
5
6
7
8
9
10
~/tt/test-git>>test $ git merge origin/master
Updating 670adc2..d3961f7
Fast-forward
welcome | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 welcome
~/tt/test-git>>test $ ll
total 8
drwxr-xr-x 3 tt staff 96B 5 8 20:54 test
-rw-r--r-- 1 tt staff 16B 8 1 19:55 test3.log

此时,你发现你提交的代码没有了,咋找回来呢,下面开始找回操作

  1. git log找到领导revert你代码的那个commit id,这里commit id是50a06845da879ab76e6fdd55dce923826742dcb2
  2. git revert –no-commit 50a06845da879ab76e6fdd55dce923826742dcb2

然后就没有然后了,你的代码已经回来了。简单吧

总结

找到领导revert你代码的commit id,然后git revert –no-commit commit id

一句话总结:把之前revert的那条commit再revert一下