git学习之旅(四)——回退版本

本地合并提交或修改提交说明

  • cd ~/user
  • mkdir sample2
  • cd sample2
  • git init
  • echo "1" > user.txt
  • git add .
  • git commit -m "NO.1 commit"
  • echo "2" >> user.txt
  • git add .
  • git commit -m "NO.2 commit"
  • echo "3" >> user.txt
  • git add .
  • git commit -m "NO.3 commit"
  • git log

  • cat user.txt

新建一个仓库,生成3次提交,每次提交只是简单的在user.txt文件后追加一个数字

之前已经介绍过git reset --hard是连同工作区一起彻底回退,后面的接的参数为HEAD~2,表示回退2次的提交,也可以用HEAD^^,还可以使用哈希值(SHA1),哈希值可以不全写,只要能区分不同提交就可以。

现在我们将NO.2和NO.3的提交合并一起再提交,这时使用git reset就可以了,保留工作区的内容。

  • git reset HEAD^^
  • git add .
  • git commit -m "NO.2 and NO.3 commit"
  • git log

  • cat user.txt

修改结果与之前一样,但log的结果已经变化了

  • git reset --hard HEAD^

回退错误的操作

如果我们错误操作连同工作区也回退了,就是修改都没了,也有办法回退操作

  • git reflog

查看到之前执行过的操作,可以查看到前一个操作所在的提交(commit)的哈希值ee78fd6

  • git reset --hard [email protected]{1} ( git reset --hard ee78fd6)

使用git reset --hard执行回退,--hard工作区也一起回退

服务器上回退提交

如果的把错误的提交更新的服务器,就不能使用git reset回退了

  • cd ~/user1
  • git clone --bare sample2 ~/repo/sample2.git

因为之前没有在服务器上建立远程仓库,先克隆一份裸的版本,再复制到服务器。因为是本地模拟服务器,所以直接克隆到相应目录

将user.txt修改成以上所示

  • git add .
  • git commit -m "error commit"
  • git remote add origin [email protected]:repo/sample2.git
  • git push origin master

因为服务器的版本是本地复制的,所以本地版本没有自动将[email protected]:repo/sample2.git命名为origin,所以我们要设置一下以方便以后提交。

  • git revert HEAD

自动生成的提交说明,不修改,ctrl+x退出

  • git log

  • git push origin master

这样就能回退最近一次的提交,当然也可以回退到更早以前的提交,但只回退单次提交,例如回退前一次提交HEAD^(NO.2 and NO.3 commit),那么第一次的提交HEAD(error commit)不会被回退,还会存在。不会像reset那样将该提交以后的版本都一起回退。

  • git diff HEAD^

使用git diff查看修改的详情,可以看出只是将要回退的提交的删除和添加的内容做了一次反操作,所以revert只回退单独一次提交的结果

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 17:03:24

git学习之旅(四)——回退版本的相关文章

Git学习笔记(四)

一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了.所有配置文件可以直接在线浏览:https://github.com/github/gitignore .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理! 二.配置别名 $ git config --global al

git学习之旅(二)——多人协助

工作区workspase 暂存区stage 版本库master的区别 工作区就是目前文件系统下的文件,所以直接打开文件夹就能看到 暂存区是通过git add后版本库暂时保存的地方,紧接着要使用git commit提交到版本库上的某个分支上 提交到版本库后相当于有了备份,以后能恢复到工作区 用户2提交 cd ~/user2 git clone [email protected]:repo/sample.git cd sample echo "Hello Git!" > user2.

Git学习笔记(2)——版本的回退,和暂存区的理解

本文主要记录了版本的回退,以及工作区,暂存区概念的理解. //开始之前,先回顾上次的内容,修改文件如下,并提交到版本库. Git is a distributed version control system. Git is free software distributed under the GPL. 1.查看版本库的信息 [email protected]:~/joe/learngit$ git log //可以看到,下面有3个版本 commit 71038bf6cbd05ef559549

Git学习笔记(一)创建版本库并添加文件

最近从廖雪峰老师的个人网站上学习git,做点笔记. ★★★★★ 先注册自己的username和email,否则会报如下错误: 注册:git config --global user.name "XXX"    -------这是注册username git config --global  user.email "[email protected]"   -------这是注册email git config  --list    -------这是查看config

Git学习笔记(一) 安装及版本库介绍

安装Git 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. 在Linux上安装Git 首先,你可以试着输入 git ,看看系统有没有安装Git: $ git The program 'git' is currently not installed. You can install it by typing: sudo

git学习笔记12-标签管理-版本

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. 在Git中打标签非常简单,首先,切换到需要打标签的分支上: $ git branch * dev master $ git check

GIT 学习一 (安装和创建版本库)

  安装GIT 从 msysgit.github.io 下载 for windows.   创建版本库 1 > mkdir foldname 2> cd foldname 3> pwd     // 显示当前目录 4> git init  // 通过git init命令把这个目录变成Git可以管理的仓库

git学习之旅(三)——合并冲突(conflict)

「情况1」同一文件内容冲突 cd ~/user2/sample git pull echo "Hello,User2" >> user.txt git add . git commit -m "user2 conflict commit" git push origin master cd ~/user1/sample echo "Hello,User1" >> user.txt git pull 由于发生了冲突不能合并新

Git学习(2)创建版本库

建版本库 创建版本库repository,Git可以对库中的文件进行管理,文件的修改和删除等都可以被Git跟踪到,可以实现历史版本的还原. 创建版本库的步骤: 1.创建一个空目录,这个仓库的路径是 c/Users/qx/learngit 2.利用 git init 命令将这个目录变成Git可管理的仓库,其中.git目录是Git用来跟踪管理版本库的 将文件添加到版本库: Git(所有的版本控制系统)只能跟踪文本文件的改动,比如TXT文件.网页.程序代码等,会告诉你在第8行添加了一个hello单词,