Git Checkout将代码还原为旧提交,如何还原?

时间:2011-08-31 21:53:33

标签: git git-checkout

我一直在研究一些代码,我使用git来管理。早些时候,我使用commit来保存我的代码版本。后来我决定重做代码,因为它需要一些新功能并且设计得很差。在我开始工作后,我做了另一个git提交。做完git log后,我看到我不在任何分支上。所以,我做了“git checkout master”。这带回了旧代码的版本,git log现在显示了我的最新提交。这是很多工作,所以我想知道是否有任何方法来撤消我所做的,并取回我的最新代码。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:13)

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

最安全的事情是在“丢失”提交中创建一个分支,然后使用gitkgit log -p

检查一切是否花花公子
git branch recovery HEAD@{1} # use whatever commit you need
git log -p recovery

然后可以合并这个新的分支,在主人的基础上重新定位,在樱桃挑选的承诺等等。在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

答案 1 :(得分:1)

使用git reflog,了解新提交的内容(或者您可以使用HEAD@{1}等格式引用它)并使用git cherry-pickgit merge等来引入承诺掌握。