GIT拉取删除了我的提交

4
在 git pull 后,我使用 git reset hard 撤销了合并前的提交。但不知何故整个提交都消失了,在历史记录中也看不到该提交。但是,我有该提交的 commit id,在 git show 命令中我可以看到我的更改。
我应该如何找回我的更改,并追踪我犯了什么错误?

@Karl 在拉取之前我已经提交了。 - Sirish
如果你想知道你实际上犯了什么错误,你需要告诉我们除了 pull 之外你做了什么。git pull 永远不会从历史记录中删除提交;你肯定做了其他的事情。也许是 checkout,也许是 reset - Cascabel
在@Jefromi的回答中,我给出了我执行的命令。 - Sirish
1个回答

5

如果您有提交哈希值,并且没有运行垃圾回收,您可以始终使用 git checkout <sha1> 回到该提交。如果您想在当前分支上重新应用它,可以使用 git cherry-pick <sha1>


@keppla 请问在 git reset HARD 到合并之前的提交 ID 后,为什么会重置所有更改?还有没有办法可以将这个悬空的提交安全地保存到其他位置? - Sirish
请问您能否发布您执行的命令?我对您的操作没有清晰的印象,我的回答是一般性的(几乎总是有效的恢复方法)。 - keppla
@siri:git reset --hard 被定义为放弃所有未提交的更改,将当前分支移动到指定的提交并检出它。之前指向的提交记录在 reflog 中,因此您始终可以从那里提取它(HEAD@{1} 表示 HEAD 的上一个值,branchname@{1} 表示 branchname 的上一个值(@{2} 表示两个操作之前的值,依此类推;默认情况下,历史记录在一段时间后过期(我不确定默认是 30 天还是 90 天)。 - Jan Hudec
我运行了以下命令: git pull git reset --hard 5a582b3bbcc2fb2d99132d329b90dd0ab9b42298(合并之前的提交ID) git pull 我在这里看不到我的提交。 - Sirish
@keppala 在 cherry pick 后,我收到了一个警告消息:文件太多(创建:3250 删除:828),跳过不精确的重命名检测。自动 cherry-pick 失败。在解决冲突后,使用 'git add <paths>' 或 'git rm <paths>' 标记已更正的路径,并使用以下命令提交结果:git commit -c 991f5528d4fbe036df26b1f686090f22c9c8fd18 . 这是什么意思? - Sirish
@siri:a)在执行了“git reset --hard 5a582b”之后,你的HEAD指向哪个提交?应该是5a582b,这也应该是你想要恢复的提交。b)“太多文件”,抱歉,我不知道。看起来你或你的团队的提交不是很小 :)。这似乎是一个非常复杂的合并。 - keppla

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