Git reset 版本回退
2017-01-11 by dongnan
问题描述
使用 git commit
提交了一个文件,但是还没有推送到服务器端,发现误操作不希望此文推送到远程 git
服务器。
git 当前状态
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
解决方法
使用 git reset
回退到指定版本
获得版本ID
git log --pretty=oneline
33ef06101dd9d4e6eff0df6665fae46878367be6 test php_codesniffer
2658ec724d968b674fc4e115b20bff348851b08f 添加新闻管理
回退到指定版本
git reset --hard 2658ec724d968b674fc4e115b20bff348851b08f
HEAD is now at 2658ec7 添加新闻管理
验证
git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
扩展:时光穿梭机
现在,你回退到了某个版本又后悔了,里面有新的代码,想恢复到新版本也是可以的。
Git 提供了一个命令 git reflog
用来记录你的每一次命令:
git reflog
2658ec7 HEAD@{0}: reset: moving to 2658ec724d968b674fc4e115b20bff348851b08f
33ef061 HEAD@{1}: commit: test php_codesniffer
回退到指定版本
git reset --hard 33ef061
HEAD is now at 33ef061 test php_codesniffer
验证
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
时光穿梭机概念
- 每当文件修改到一定程度的时候,就可以保存一个快照,这个快照在Git中被称为
commit
。 - 一旦把文件改乱了,或者误删了文件,还可以从最近的一个
commit
恢复,然后继续工作。 - 在Git中,我们用
git log
命令查看历史提交记录: git reset
就是时光穿梭机,如果准备把某个文件回退到上一个版本,必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交。- 上一个版本就是
HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。 - 例如:指定回到某个版本(版本号没必要写全,前几位就可以):
git reset --hard 1a6026
小结
HEAD
指向的版本就是当前版本,因此 Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。- 穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。 - 要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。
扩展内容来自: Git教程-版本回退