Git,我丢失了我的更改。

4
这个问题主要是由于我所在的咖啡厅的wifi连接不好导致的。我对我的本地库进行了若干更改,每次更改后我都会正确地推送(push)。但最近一次推送时,因为网络连接不稳定,虽然git log显示已经提交(commit),但git status却显示我的本地库和远程库存在不一致(discrepancy)。
既然上一次推送(push)成功了,我认为我可以这样做。
git fetch origin
git reset --hard origin/master

但是,糟糕的是,这个操作删除了我今天做的所有提交,现在的HEAD是我昨天提交的某个版本。当我去Bitbucket查看仓库时,它甚至没有显示今天的更改。

有人能告诉我我没有搞砸自己吗?有解决方法吗?


1
让我们明确一点:Git 没有丢失你的更改;是你自己弄丢了。 ;) - TheBuzzSaw
1
@TheBuzzSaw:没必要讲得这么教条主义:-)今天我也遇到了同样的问题。虽然我是在使用smartgit,但突然间我的本地提交在我从远程仓库拉取后就消失了。这以前从未发生过。幸运的是,我找到了这个帖子,并成功地找回了提交并与远程进行了合并。 - boggy
1个回答

12

检查 git reflog,可以查看最近所有活动的提交哈希值。

Git 至少会保留 2 周不可达的提交记录,除非你明确告诉它要删除它们。

另外,git log -g 可能也有帮助:

-g, --walk-reflogs

与其遍历提交历史链,倒序遍历引用日志记录。


是的,我刚刚进行了 git reflog,庆幸的是提交记录在那里,现在为了避免再次搞砸自己,我做错了什么? 找到所需的提交哈希后应运行哪个命令? - Eddie
你可以使用 git reset --hard 命令回到任何一个提交状态,不仅限于已命名的分支。你也可以通过 merge 命令合并那个“丢失”的提交哈希值。 - Gareth
关于你做错了什么,我猜“我的最后一次推送成功了”可能并不是真的,而且你可能错过了某个错误信息。不幸的是,如果没有看到你实际的终端会话,就无法确定。 - Gareth
我正在尝试,但是这家咖啡馆的wifi太差了,啊,我终于搞定了,谢谢。 - Eddie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接