问题场景
实际工作中,在上线时,你的新功能代码都是在gitlab上提交merge to master的请求,拥有merge权限的领导通过后,你的代码才合到master。好,QA开始上线了你的代码,这时 啪,啪,报警了,代码有问题。领导revert了你的代码以保证master分支的正确。这时,你的分支pull了master后,你发现你分支上的新功能代码都没有了!!咋找回来
本文从实战角度来解决这个问题
条件
- 假设你已经有了一个
git项目: test-git
,并且有两个分支:master,test
实战
在test
分支,你创建了一个文件welcome
,文本:hi git
。并git commit -m '测试git revert'
提交
当前,master,test
分支的内容分别如下
~/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
~/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
请求,如下图
领导merge
后开始上线,假设线上出现问题,领导revert
了这次提交的代码。如下图
接着你要查看问题,所以你会本地操作,回到你的代码分支,执行git merge origin/master
~/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
此时,你发现你提交的代码没有了。welcome
文件不见了,咋办
咋找回来这些代码呢?下面开始找回操作
-
git log
找到领导revert
你代码的那个commit id
,这里commit id
是50a06845da879ab76e6fdd55dce923826742dcb2
。如下图三个commit
的说明 -
git revert --no-commit 50a06845da879ab76e6fdd55dce923826742dcb2
你的代码已经回来了,然后就没有然后了,简单吧
总结
找到领导revert
你代码的commit id
,然后git revert --no-commit commit id
一句话总结:把之前revert
的那条commit
再revert
一下