我一直在研究一些代码,我使用git来管理。早些时候,我使用commit来保存我的代码版本。后来我决定重做代码,因为它需要一些新功能并且设计得很差。在我开始工作后,我做了另一个git提交。做完git log后,我看到我不在任何分支上。所以,我做了“git checkout master”。这带回了旧代码的版本,git log现在显示了我的最新提交。这是很多工作,所以我想知道是否有任何方法来撤消我所做的,并取回我的最新代码。在此先感谢您的帮助。
答案 0 :(得分:13)
检查git reflog
并找到您的提交。
最安全的事情是在“丢失”提交中创建一个分支,然后使用gitk
或git 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 newbranch
或git checkout -b newbranch
答案 1 :(得分:1)
使用git reflog
,了解新提交的内容(或者您可以使用HEAD@{1}
等格式引用它)并使用git cherry-pick
,git merge
等来引入承诺掌握。