如果我运行gitbranch-d XYZ,是否有方法恢复该分支?有没有办法像我没有运行delete branch命令一样返回?


当前回答

首先转到git批处理项目,如:

cd android studio project
cd Myproject
then type :
git reflog

你们都有一个更改列表,参考号取参考号,然后从android studio或git betcha结账。另一个解决方案是获取参考号,然后转到android工作室,单击git分支,然后单击签出标签或参考号之后的修订,然后lol您就有了分支。

其他回答

首先转到git批处理项目,如:

cd android studio project
cd Myproject
then type :
git reflog

你们都有一个更改列表,参考号取参考号,然后从android studio或git betcha结账。另一个解决方案是获取参考号,然后转到android工作室,单击git分支,然后单击签出标签或参考号之后的修订,然后lol您就有了分支。

恢复已删除分支的一般问题的一个非常常见的子问题是在合并后恢复功能分支,然后删除它,这是常见的做法。

由于这篇SO文章涵盖了,如果已成功合并,您始终可以恢复已删除的分支。这是因为分支只是一个指向提交的花哨指针,因为您已经合并,所以提交仍然存在。合并提交将列出合并的两个(或多个)分支的头部提交的哈希值。例如:

        git show master
        commit 849675951d41497e7b07d34096ebf36dc713221 (HEAD -> master)
        Merge: fc1c9ce 97f8a60
        Author: Me
        Date:   Sun Jan 9 16:14:24 2022 +0100

            Merge branch 'feature'

因此,您可以通过执行git checkout-b feature97f8a60来恢复delete“feature”分支,无需任何reflog内容。

我在删除分支的计算机上执行此操作:

数字刷新

响应:

74b2383 (develope) HEAD@{1}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: checkout: moving from develope to master
74b2383 (develope) HEAD@{3}: checkout: moving from master to develope
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{4}: reset: moving to HEAD
40ef328 (HEAD -> master, origin/master, origin/HEAD) HEAD@{5}: clone: from http://LOCALGITSERVER/myBigProject/Android.git

并且我使用以下命令检索分支:

git checkout-b newBranchName 74b2383

确保在本地执行所有这些操作,并在推送到Bitbucket云之前确认您的回购处于所需状态。克隆当前的回购协议,并首先测试这些解决方案可能也是一个好主意。

如果您刚刚删除了分支,您将在终端中看到类似的内容:

    Deleted branch <your-branch> (was <sha>)

2.要恢复分支,请使用:

    git checkout -b <branch> <sha>

如果你不知道头顶上的“sha”,你可以:

使用以下方法在已删除分支的末端查找提交的“sha”:

    git reflog

要恢复分支,请使用:

    git checkout -b <branch> <sha>

如果您的提交不在reflog中:

您可以尝试通过使用以下命令将分支重新设置为提交的sha来恢复分支:

    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

2.然后可以使用以下选项之一显示每个提交:

    git log -p <commit>
    git cat-file -p <commit>

当提交在reflog中时

大多数时间无法访问的提交都在reflog中。因此,首先要尝试使用命令git reflog(它显示HEAD的reflog)查看reflog。

如果提交是一个特定且仍然存在的分支的一部分,那么使用命令git reflog名称可能会更简单。它也适用于远程设备,例如,如果您使用了强制推送(尽管应该使用gitpush-forcewithlease,这样可以防止错误,并且更容易恢复)。


当他们不在reflog中时

如果您的提交不在reflog中(可能它们被不写入reflog的第三方工具删除了),您可以先尝试使用此命令创建一个包含所有悬空提交的文件

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并将分支重置为它。

经常使用的用户可以使用

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 cat-file -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

另请参见差异:

git log -p 48540dfa438ad8e442b18e57a5a255c0ecad0560

在找到的提交上创建分支:

git branch commit_rescued 48540dfa438ad8e442b18e57a5a255c0ecad0560

Windows GUI可以通过菜单Repository=>Git maintenance=>recover lost objects。。。

相关:轻松恢复以前暂存的已删除文件