git log
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。
$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
HEAD
指向的版本就是当前版本
因此,Git允许我们在版本的历史之间穿梭,使用命令:git reset --hard commit_id
$ git reset --hard eaadf4
现在,你回退到了某个版本,而且新添加了一些东西,新
commit
之后关掉了电脑,第二天发现把别人的代码都冲掉了,gg…
git reflog
我叫它后悔药(^^)
在Git中,总是有后悔药可以吃的。当你用
$ git reset --hard HEAD^
回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。
Git提供了一个命令git reflog
用来记录你的每一次命令
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
终于舒了口气,这时候要记好两个值:他们分别是新commit的hash码和旧版本最新的hash码。然后执行回滚,回到旧版本最新上:
$ git reset --hard 1094a
别忘了,本地回退回来之后,记得强制推送到远程,
$ git push origin HEAD --force
此时,我们又想保留新commit的代码,怎么办呢?
git cherry-pick
这个时候就用上了git cherry-pick,刚刚我们回到了旧版本最新,现在我们想加上新commit,操作如下
git cherry-pick `新commit的hash码`
期间可能会有一些冲突,按照提示解决就好