1 问题
- dev分支上出现过去删除的代码
- 初步定位后,是一位同事merge过旧的代码后,带着新的改动,提交了一次pr,并且此次pr已经merge到了公共分支上
2 痛苦过程
- 第一步只能定位到某次pr,可以看到提交了已删除的文件,同时也包含新的修复
但这个pr 能够看到很多commit,不确定,是不是要用很多commitId进行revert - 第二步是去看整个项目的commit记录,希望确定是哪个commit引入的,但依然没有找到
找了一下重新出现文件的git history, 都是update记录,没有看到add commit(痛苦) - 第三步向大佬求救,大佬说先查看一下重新出现的文件夹的git history, 发现最新的历史是对应同事的一次merge操作, 点开了merge的两个分支的改变,发现其中一个分支添加了这个文件夹
至此,对应的commit操作已经定位 回到整个项目的这次commit, 点开历史查看,其中一个分支的变更包括了相关已删除文件的添加
注:对于merge操作,两个分支对它而言是平等的,虽然其中一个分支是添加文件,但另一个分支是有这个文件的,因此merge的结果认为这不是一个添加操作,因此从merge结果,包括github上,看不出来是一个添加的commit, 这也是让人头痛的地方
3 解决操作
- 问题定位后,确认是一个merge commit 的 revert
- 使用revert命令
git revert c53f0d5a -m 2
- c53f0d5a 是整个commit的id
-
- 2 表示需要撤销的分支,这里因为是第二个分支添加了已删除文件
Merge代码
- 出现冲突需要merge时,先点击All, 然后以左边的为准,因为左边包含了最新的代码
4 注意事项
- 在这个过程中,差点打算对本次pr进行 revert , 这是非常危险的
- 首先这个pr包含了相关提交,一旦revert可能丢失,也要重新提交
- 其次,这次pr并不是根源,可能引发新的merge问题,
- 最后,即使revert成功,相关同事在本地可能依旧不知如何操作,因为本地已经提交多个commit,同样需要进行相关的merge revert, 重新commit,重新提交pull request
从中央分支处理revert后,所有同事,更新最新代码即可,比较方便
|