繁体   English   中英

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

[英]How do I recover from a lost git branch

我有一个正在处理的项目,我从一个本地仓库开始。 最近,我有人创建了一个github存储库,然后将本地存储库上传到github(存在各种错误和建议,但最终看起来像是在那儿。)这样做之后,从原点/母版中拉出,我发现我在缺少一个月左右的工作。 显然,我的进程清除了一个名为“ 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 log --pretty=format:"%h - %an, %s"
  5825339 - David Rogers, Merge branch 'master' of https://github.com/...
  3c41742 - Someone Else, Initial commit
  6db6654 - unknown, Labels V 1.1.8
  2085c27 - David Rogers, Remove site 29 XML subdirectory from installer
  956c939 - David Rogers, Update user settings on upgrade
  1c39bbc - David Rogers, Update user settings on upgrade
  ac48392 - David Rogers, Initial commit

感谢这里的精彩网页: http : //gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html ,我可以看到更大的画面:

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

(请注意“结帐:从主节点移动到回显节点。”)无论如何,在我看来,我缺少的分支的头部是bb4cbe2。 问题是,如何还原工作并将其git到原始服务器/主服务器?

也,

git fsck --lost-found
  Checking object directories: 100% (256/256), done.
  dangling commit b7642f4fa87f52b0991f88ce08e29d5aaa43edd3

我开始: 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 reset之前有完整的磁盘备份。

大卫

我会根据原产/母版进行重新设置,然后再推送至原产/母版。 如果您不关心丢失提交历史记录,也可以将其合并到master上。

如果您在发布的引用日志中看到以前想要的状态,则可以从引用日志中检出该状态,例如:

git checkout HEAD@{3}

这将带您进入状态由reflog标识的分支。 如果那是在您拉扯之前,那可能就是您想要的。

git checkout b7642f4fa87f52b0991f88ce08e29d5aaa43edd3

这将检出悬空的提交。 如果这是您想要返回的内容,那么只需从该提交中创建一个新分支,您便会很高兴。 如果不是,那么您可能想更好地解释您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM