设为首页 收藏本站
查看: 835|回复: 0

[经验分享] 【Git】三、版本回退&撤消修改&文件删除

[复制链接]

尚未签到

发表于 2018-1-13 23:43:15 | 显示全部楼层 |阅读模式
提要
  

//查看git操作日志  
$ git log
  
//单行格式查看操作日志
  
$ git log --pretty=oneline
  
//还原操作到上一次版本,有几个^就上几次
  
$ git reset --hard HEAD^
  
//还原操作到某一次版本,后面的是版本code
  
$ git reset --hard e6ded2
  
//撤销修改,在add之前的修改,撤销工作区中的修改
  
$ git checkout -- testgit.txt
  
//撤销修改,在add之后的修改,撤销到add前
  
$ git reset HEAD testgit.txt
  
//删除工作区中的文件
  
$ rm test.txt
  

一、版本查看
  多次提交后可以通过指令查看历史提交记录
  

$ git log  
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
  
Author: shane <ls199242@163.com>
  
Date:   Sat Jul 1 11:23:53 2017 +0800
  

  test commit,2 files is commited
  

  
commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
  
Author: shane <ls199242@163.com>
  
Date:   Sat Jul 1 10:47:47 2017 +0800
  

  readme file
  

  以上是详细信息的版本,可以使用指令只呈现一行,看起来比较清晰
  

$ git log --pretty=oneline  
e6ded21d1de20d8ea2b847e9a35ac50fcabfac70 (HEAD -> master) test commit2
  
a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 test commit,2 files is commited
  
81a320cda2e80405cb9e4c92c236bc7289eaf0f8 readme file
  

  这个是又提交了一次的历史log,--pretty=oneline表示用一行的格式显示提交
  
前面一串是提交版本的id,HEAD表示当前版本,id后面跟着的是提交的content

二、版本回退
  查看指令后如果最近一次提交有错误想要回退到前一次,可以使用指令重置,类似于游戏里的读档
  

$ git reset --hard HEAD^  
HEAD is now at a50498c test commit,2 files is commited
  

  使用指令reset就可以还原到某一次提交,HEAD^表示还原到上一个版本,如上例中的a50498c 版本
  
有几个^就回退几个版本,如果版本较多可以写成HEAD~n,n代表回退的版本个数
  
此时再查看log
  

$ git log  
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
  
Author: shane <ls199242@163.com>
  
Date:   Sat Jul 1 11:23:53 2017 +0800
  

  test commit,2 files is commited
  

  
commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
  
Author: shane <ls199242@163.com>
  
Date:   Sat Jul 1 10:47:47 2017 +0800
  

  readme file
  

三、回退错误的还原
  此时最后一次的提交log已经没有了,如果还原错了,只要有最后一次提交的版本id,也是可以撤销还原的,再回到最后一次的版本
  

$ git reset --hard e6ded21d1de20d8ea2b847e9a35ac50fcabfac70  
HEAD is now at e6ded21 test commit2
  

  如果你找不到id,git提供了一个指令,可以回溯你的每一次操作,即使你关掉了git bash 第二天再打开,也是可以看到记录的
  

$ git reflog  
e6ded21 (HEAD -> master) HEAD@{0}: reset: moving to e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
  
a50498c HEAD@{1}: reset: moving to HEAD^
  
e6ded21 (HEAD -> master) HEAD@{2}: commit: test commit2
  
a50498c HEAD@{3}: commit: test commit,2 files is commited
  
81a320c HEAD@{4}: commit (initial): readme file
  

  在这里就能找到最后一次提交的id是e6ded21,然后再reset到这个版本就好了

四、撤销修改
  撤销修改有两种场景

4.1在add进暂存区之前的修改撤销
  当你在工作区修改了一部分文件,但是又想舍弃修改的时候,一个一个还原会很麻烦,这时git提供了一个指令
  

$ git checkout -- testgit.txt  

  git checkout -- 文件名,指对这个文件进行还原,--很重要,如果不加--表示切换到某个分支

4.2在add进暂存区之后的修改撤销
  如果你要舍弃的修改已经add到了暂存区,需要使用以下指令
  

$ git reset HEAD testgit.txt  

  git reset HEAD 文件名,表示将当前master分支暂存区的文件testgit.txt unstage到工作区,然后在使用checkout指令撤销修改即可

五、文件删除
  如果你新建了一个文件,并且add、commit到了本地分支,然后你想把他删除,可以使用以下指令
  

$ rm test.txt  

  rm 我猜是remove的意思,这个指令只是删除工作区中的文件,git会检测到test.txt 有修改
  
此时如果确实要删除文件并提交,需要先执行git中的文件删除,即相当于把删除的修改add到暂存区,再进行提交
  

$ git rm test.txt  
rm 'test.txt'
  
$ git commit -m "delete test.txt"
  
[master e8c7ff0] delete test.txt
  1 file changed, 1 deletion(-)
  delete mode 100644 test.txt
  

  若是误删,和上面修改文件还原操作一致,先使用git reset HEAD filename ,再使用git checkout -- filename,进行还原

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434859-1-1.html 上篇帖子: Android Studio中Git和GitHub使用详解 下篇帖子: Git配合Tag的代码回滚
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表