跳转至

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教程-版本回退

欢迎关注微信公众号: 运维录

Back to top