问题描述
在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 复制代码
相关文章
Using the Reflog to Restore Lost Commits