Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从丢失的git分支中恢复_Git_Github_Git Branch_Recovery - Fatal编程技术网

如何从丢失的git分支中恢复

如何从丢失的git分支中恢复,git,github,git-branch,recovery,Git,Github,Git Branch,Recovery,我有一个项目我正在工作,我开始在当地回购。最近,我让人创建了一个github回购协议,我将本地回购协议上传到github(有各种错误和建议,但最终看起来好像是在那里)。在这样做之后,从origin/master开始,我注意到我错过了一个月左右的工作。显然,我的进程清除了一个名为“echo”的分支 现在我想从丢失的分支恢复这些更改。以下是当前图片: git status On branch master Your branch is up-to-date with 'origin/mast

我有一个项目我正在工作,我开始在当地回购。最近,我让人创建了一个github回购协议,我将本地回购协议上传到github(有各种错误和建议,但最终看起来好像是在那里)。在这样做之后,从origin/master开始,我注意到我错过了一个月左右的工作。显然,我的进程清除了一个名为“echo”的分支

现在我想从丢失的分支恢复这些更改。以下是当前图片:

git status
  On branch master
  Your branch is up-to-date with 'origin/master'.
  nothing to commit, working directory clean

git branch
  * master

git checkout echo
  error: pathspec 'echo' did not match any file(s) known to git.
以及:

感谢这里精彩的页面:, 我可以看到更大的图景:

git reflog
  5825339 HEAD@{0}: pull origin master: Merge made by the 'recursive' strategy.
  6db6654 HEAD@{1}: checkout: moving from echo to master
  b7642f4 HEAD@{2}: pull origin master: Merge made by the 'recursive' strategy.
  bb4cbe2 HEAD@{3}: commit: before github
  9288903 HEAD@{4}: commit: before github
  2e8336a HEAD@{5}: commit: prior to github
  6db6654 HEAD@{6}: checkout: moving from master to echo
  6db6654 HEAD@{7}: commit: Labels V 1.1.8
  2085c27 HEAD@{8}: commit: Remove site 29 XML subdirectory from installer
  956c939 HEAD@{9}: commit: Update user settings on upgrade
  1c39bbc HEAD@{10}: commit: Update user settings on upgrade
  ac48392 HEAD@{11}: commit (initial): Initial commit
(注意“签出:从master移动到echo”)无论如何,在我看来,我丢失的分支的头是bb4cbe2。问题是,如何恢复工作并将其提交给源代码/主代码

而且

我是否以:
git reset--hard bb4cbe2

如果我这样做,我会得到:

git reset --hard bb4cbe2
  HEAD is now at bb4cbe2 before github

git status
  On branch master
  Your branch and 'origin/master' have diverged,
  and have 3 and 2 different commits each, respectively.
    (use "git pull" to merge the remote branch into yours)
  Untracked files:
    (use "git add <file>..." to include in what will be committed)

        xxx.vshost.exe.manifest
        xxx/bin/Release/
        xxx/obj/Release/
        xxx/Release/

nothing added to commit but untracked files present (use "git add" to track)
git重置——硬bb4cbe2
HEAD现在位于github之前的bb4cbe2
git状态
论分行行长
您的分支和“原始/主”已发生分歧,
和分别有3个和2个不同的提交。
(使用“git pull”将远程分支合并到您的分支中)
未跟踪的文件:
(使用“git add…”包含在将提交的内容中)
xxx.vshost.exe.manifest
xxx/垃圾箱/放行/
xxx/obj/发布/
xxx/发布/
提交时未添加任何内容,但存在未跟踪的文件(使用“git add”跟踪)
看起来文件不错。现在怎么办?我从原点出发吗?然后推到原点

我应该提到的是,我有一个完整的磁盘备份,从
git重置之前开始


David

我会在origin/master上做一个重基,然后推到origin/master。如果你不在乎丢失提交历史记录,你也可以合并到主机上。

我会在origin/master上做一个重基,然后推到origin/master。如果您不介意丢失提交历史记录,也可以将其合并到主机上。

如果您在发布的reflog中看到之前所需的状态,您可以从reflog中签出该状态,例如:

git checkout HEAD@{3}

这将把您带到一个分支,该分支的状态由reflog标识。如果那是在你拉之前,那很可能是你想要的。

如果你在你发布的reflog中看到了你之前想要的状态,你可以从reflog中检出该状态,例如:

git checkout HEAD@{3}
git checkout b7642f4fa87f52b0991f88ce08e29d5aaa43edd3
这将把您带到一个分支,该分支的状态由reflog标识。如果那是在你拉之前,那很可能是你想要的

git checkout b7642f4fa87f52b0991f88ce08e29d5aaa43edd3
这将检查悬空提交。如果这是你想要得到的,那么只要从这个提交中创建一个新的分支,你就是黄金。如果不是,那么你可能想更好地解释你的问题



这将检查悬空提交。如果这是你想要得到的,那么只要从这个提交中创建一个新的分支,你就是黄金。如果不是,那么您可能想更好地解释您的问题。

您是说我应该从git reset--hard bb4cbe2
开始吗?然后呢
git-rebase…
我认为根据您的说法,您可以做:git分支echo git checkout echo git-rebase master echo不,分支“echo”不存在。它消失了。如果您在reflog中正确重置,它应该会将它带回来。我忘了提到有一个由
git fsck
报告的“悬空提交”。我没有对reflog做任何操作,只是将它用作一个报告。你是说我应该从git reset开始——硬bb4cbe2?然后呢
git-rebase…
我认为根据您的说法,您可以做:git分支echo git checkout echo git-rebase master echo不,分支“echo”不存在。它消失了。如果您在reflog中正确重置,它应该会将它带回来。我忘了提到有一个由
git fsck
报告的“悬空提交”。我没有对reflog做任何操作-只是将其用作报告。您的问题令人困惑。你的分行刚刚过时,对吗?问题不是悬而未决的承诺吗?很抱歉搞混了。我试图提供所有可能相关的信息-我不知道我可能没有提供正确的信息。我不清楚你是如何删除你的本地分支
echo
,但你一定是这样做的,因为
正在从。。。证明它曾经存在过。您似乎已经正确地将
bb4cbe2
标识为前面指出的位置
echo
,在这种情况下,只要提交ID保持有效,您就可以执行
git branch echo bb4cbe2
重新创建它(reflog保持其有效性,但如果无法从引用的当前ID访问,则这些有效期仅为30天左右)。我怀疑,由于github上的origin没有echo分支,因此在我从origin进行拉取时,它已被清除。那是大约一周前,因此我不清楚操作的确切顺序。但是,我很清楚,我没有删除任何内容。:-“git branch echo bb4ce2”听起来像是一个大胜利。。。试一试,然后融入大师…托瑞克,你能回答这个问题吗?这是一个git新手可以理解并感到舒服的做法。这是一个非常简单的解决方案。完整的顺序是:
git分支echo bb4cbe2
git pull
git merge echo
git push
您的问题令人困惑。你的分行刚刚过时,对吗?问题不是悬而未决的承诺吗?很抱歉搞混了。我试图提供所有可能相关的信息-我不知道我可能没有提供正确的信息。我不清楚你是如何删除你的本地分支
echo
,但你一定是这样做的,因为
正在从。。。证明它曾经存在过。您似乎也正确地识别了