2

切换到另一个分支后我丢失了我的代码(以为我推了它,但头部分离了)

我从 master 切换到 origin/somebranch 在那里做了一些工作然后我不得不快速修复 master 中的一些东西,所以我做了 git add -A git commit -m "some commit" git push git checkout master

我做得很快,所以我没有阅读关于头部分离的消息......所以当我切换回某个分支时,我的更改不存在......我的更改是否丢失或有办法恢复它?

4

2 回答 2

3

不,您的提交不会丢失,此时它不会被任何分支引用(因此,垃圾收集的候选者)但 reflog 会在一段时间内保留对它的引用(默认情况下为 90 天,但您可以检查您的配置条目gc.reflogExpire),这样您就可以恢复它。

如何?第一种可能的方法

条件:仅当您的终端仍然打开并显示先前操作的输出时。

如果是这样,您将能够轻松地发现您的提交的哈希:

git commit -m "Useful message here"
[master ec470f4] Useful message here
 1 file changed, 1 insertion(+), 1 deletion(-)

此时只需重新创建一个分支:

git checkout -b recovered-branch ec470f4

如果出于任何原因,您没有这个机会(终端关闭,clear在此期间做了什么),不用担心:

第二种方法,reflog

git reflog

列出所有以前的位置HEAD,因此只需在此处获取您想要的提交哈希并使用相同的命令重新创建您的分支。

于 2019-06-15T23:22:53.657 回答
2

只需检查 reflof 并找到您的提交并使用该 ID 创建一个新分支或移动一个已经存在的分支

git reflog
git branch -f some-branch the-id-of-the-revision
于 2019-06-15T23:22:11.193 回答