Git删除分支后能否恢复

Git删除分支后能否恢复

技术背景

在使用Git进行版本控制时,有时可能会误删分支。由于Git强大的历史记录管理功能,即使分支被删除,通常也有办法恢复。了解如何恢复已删除的分支,对于避免数据丢失和保证开发工作的连续性至关重要。

实现步骤

找到提交哈希

这是恢复分支的关键步骤,有以下几种方法:

提交哈希在reflog

  • 大多数情况下,不可达的提交会保留在reflog中,可使用git reflog命令查看HEADreflog。例如:
1
git reflog
  • 若提交属于某个特定且仍然存在的分支,使用git reflog name-of-my-branch会更方便。如果是远程操作,例如强制推送,该命令同样适用。

提交哈希不在reflog

若提交不在reflog中,可使用以下命令创建一个包含所有悬空提交的文件:

1
git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

然后从文件中读取缺失提交的SHA

恢复分支

重新创建分支

找到提交哈希后,可使用以下命令重新创建分支:

1
git checkout -b <your-branch> <sha>

例如,若要恢复名为feature-branch的分支,提交哈希为1234567,则执行:

1
git checkout -b feature-branch 1234567

在指定提交哈希上创建新分支

也可以使用以下命令在指定的提交哈希上创建新分支:

1
git branch <my-new-branch-name> <commit-hash>

核心代码

查找提交哈希

1
2
3
4
5
6
# 查看HEAD的reflog
git reflog
# 查看特定分支的reflog
git reflog name-of-my-branch
# 创建包含悬空提交的文件
git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\ -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt

恢复分支

1
2
3
4
# 重新创建分支
git checkout -b <your-branch> <sha>
# 在指定提交哈希上创建新分支
git branch <my-new-branch-name> <commit-hash>

最佳实践

  • 及时操作:分支删除后尽快尝试恢复,因为reflog中的记录可能会过期被清理。
  • 谨慎操作:恢复分支前,确认要恢复的提交哈希是否正确,避免恢复错误的分支。
  • 使用别名:对于常用的复杂命令,可创建别名,例如:
1
git config --global alias.rescue '!git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt'

之后可使用git rescue命令查找提交哈希。

常见问题

提交哈希不在reflog中怎么办?

可使用git fsck命令查找悬空提交,如上述创建包含悬空提交文件的命令。

恢复分支后,工作目录有未提交的更改怎么办?

恢复分支时,可使用git branch <branch> <sha>命令,这样不会影响当前分支和未提交的更改,仅会创建一个新分支。

使用git reflog未返回完整的SHA怎么办?

使用git reflog --no-abbrev命令获取完整的SHA


Git删除分支后能否恢复
https://119291.xyz/posts/git-branch-recovery-after-deletion/
作者
ww
发布于
2025年5月28日
许可协议