如何从丢失的git分支中恢复
我有一个项目我正在工作,我开始在当地回购。最近,我让人创建了一个github回购协议,我将本地回购协议上传到github(有各种错误和建议,但最终看起来好像是在那里)。在这样做之后,从origin/master开始,我注意到我错过了一个月左右的工作。显然,我的进程清除了一个名为“echo”的分支 现在我想从丢失的分支恢复这些更改。以下是当前图片:如何从丢失的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
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
,但你一定是这样做的,因为正在从。。。证明它曾经存在过。您似乎也正确地识别了