git远程代码库回滚(webstorm下)
1. 场景
添加了一个文件【file-for-test.js】到git的控制下
进行了三次修改,并分别进行了三次commit,最后进行了一次push
git log结果如下图:
【file-for-test.js】文件的内容如下图:
现在希望,将远程代码库下的【file-for-test.js】文件回滚到【//lyn test1】的版本
2. 操作步骤
2.1. 【Version Control】——【Log】
2.2. 右击【//lyn test1】行,【Reset Current Branch to Here...】
2.3. 选择【Hard】,点击【Reset】
此时git log结果如下图:
2.4. 关键步骤:设置force push
2.4.1. 【VCS】——【Git】——【Push】
2.4.2. 【Configure】
2.4.3. 勾选【Allow force push】,【OK】
2.5. 【VCS】——【Git】——【Push】
2.6. 勾选【Push Tags】,选择【Current Branch】,选择【Force Push】
2.7. 【Force Push】
2.8. OK
git log结果如下图:
【file-for-test.js】文件的内容如下图:
3. 特别注意
后来发现,使用本文所述方法,在以下场景会出现问题:
动作1:开发人员A push了一个错误的commit到远程代码库
动作2:开发人员B pull了远程代码库到其本地代码库中
动作3:开发人员B修改了一定的代码,commit到其本地代码库中(与远程代码库中不冲突)
动作4:开发人员A按照本文操作,回滚远程代码库到push错误的commit之前的版本
动作5:开发人员B push本地代码库中的commit到远程代码库中
就在此时,由于开发人员B的本代码库中有开发人员A错误的commit,所以开发人员B的push操作会先将本地代码库(有错误commit的版本)和远程代码库(没有错误commit的版本)进行merge,得到一个有错误commit的版本,再push到远程代码库上。所以,你懂的。
故,结论:当出现需要远程代码库回滚时,采用直接修改后再重新push的方法,不要采用本文所描述的方法