Git分支误删,如何恢复?

2,763 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

问题描述

image.png

在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来恢复被删除的分支

image.png

git loggit 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

image.png

git log --pretty=oneline
git reflog --pretty=oneline

image.png

git log --oneline
git reflog --oneline

image.png

相关文章

Using the Reflog to Restore Lost Commits