持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
问题描述
在gitlab页面上合并分支时,勾选了“Delete source branch when merge request is accepted.”,因此在分支合并完成之后会自动删除被合并分支。
如果本地还没有删除分支
在页面上合并的时候,如果是因为勾选了“Delete source branch when merge request is accepted.”而导致远程分支被删除了,这个时候往往本地分支还是存在的,因此可以直接在本地推一下分支即可:
git push
如果本地也删除了分支
关于分支被删除有两种可能,要么是用命令进行的删除操作,可以用git log看到;要么是在浏览器进行分支合并的时候,勾选了合并后删除源分支的选项。
1.查看被删除的分支
查看被删除的分支:
git remote prune --dry-run origin
2.找到被删除分支的最后一次提交记录的commit SHA值
在这时候想起了reflog, 这是一个升级版的日志,它存储了仓库(repo)里面所有动作的历史。
git reflog
Git的 reflog 在rebasing出错的时候也是同样有用的。
3.恢复分支
方法1:使用命令恢复
假设在上一步骤找到的SHA值为5f8fe57,被删除的分支是dev:
git checkout -b dev 5f8fe57
方法2:Gitlab上根据commit SHA直接新建branch来恢复被删除的分支
git log 和 git reflog 的区别
在上面的操作中,查看记录我们用到的命令是:
git reflog
我们知道,更为常用的查看日志的命令是:
git log
两者有何区别呢?
git log
git log命令可以显示当前分支所有提交过的版本信息,不包括已经被删除的commit记录和reset的操作。
举个例子:
我们经常会使用回滚命令使得代码进行回退:
git reset --hard SHA值
回滚之后使用git log命令发现回滚删除的commit记录看不到了,说明git log命令是不包括已经被删除的commit记录和reset的操作的。
git reflog
git reflog命令可以查看所有分支的所有操作记录信息,包括已经被删除的commit记录和reset操作。
针对回滚命令导致的删除commit操作,git reflog命令可以轻松的看到被删除的commit记录,此外,可以查看所有分支的所有操作记录信息。比如在branch1分支上切到branch2分支上修改了一些代码并进行了commit提交记录操作,此时切回到branch1分支,使用git reflog命令可以查看到branch2提交的记录。
额外
针对这两个查看日志命令,其显示的信息如果觉得太繁琐,可以加上参数--pretty=oneline或--oneline,使得只会显示版=版本号和提交备注信息。
git log
git reflog
git log --pretty=oneline
git reflog --pretty=oneline
git log --oneline
git reflog --oneline