5

我一直在编写一些代码,我使用 git 来管理这些代码。早些时候,我使用提交来保存我的代码版本。后来我决定重做代码,因为它需要一些新功能并且设计得很糟糕。在我让它工作之后,我又做了一次 git commit。执行 git log 后,我发现我不在任何分支上。所以,我做了“git checkout master”。这又回到了我的旧代码版本, git log 现在显示我的最新提交。这是很多工作,所以我想知道是否有任何方法可以撤消我所做的事情,并取回我的最新代码。在此先感谢您的帮助。

4

2 回答 2

14

检查git reflog并找到您的提交。

最安全的事情是在“丢失”提交时创建一个分支,然后检查是否一切都花花公子使用gitkgit log -p

git branch recovery HEAD@{1} # use whatever commit you need
git log -p recovery

然后可以合并这个新分支,重新基于 master 的顶部,提交它的樱桃,等等。在 git 中有很多可能会在脚上开枪,但还有更多的方法可以重新连接那只脚(可能是你的武器)。

如果你还没有在 master 上做任何新的提交,你可以简单地合并有问题的提交,这将被 git 解决为快进合并:

git merge HEAD@{1} # use whatever commit you need

如果您不关心 master 上的任何新提交,而只想将 master 分支重置为丢失的提交,请使用 git reset。为了不丢失任何更改,请先将更改存储到您的工作副本 ( git stash save)

git reset --keep HEAD@{1}

下次您发现自己不在任何分支上时,请使用git branch newbranchgit checkout -b newbranch

于 2011-08-31T21:57:41.393 回答
1

使用git reflog, 获取新提交的 sha(或者您可以以类似的格式引用它HEAD@{1})并使用git cherry-pick,git merge等将提交引入 master。

于 2011-08-31T21:56:52.830 回答