博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Git入门之五】版本管理
阅读量:6250 次
发布时间:2019-06-22

本文共 3222 字,大约阅读时间需要 10 分钟。

hot3.png

1.版本回退

我们先看一下从项目开始到现在做了什么操作。

[cpp] 

  1. #总共是4个操作  

  2. $ git log --pretty=oneline  

  3. c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03  

  4. a25c58804cb3f4045564fc0ec6a4e6eb4dae7072 amend modify JackyData02  

  5. cba8800f2daaf4075a506b6d763798ea15ba11cc modify JackyData01  

  6. aea0365712908805bc28540b4db9fd2f15360a8b init AddFiles  

现在我后悔了,不想移除JackyData03,怎么办?

git reset用于版本回退,首先我们必须先知道当前版本是哪个,git用HEAD来表示当前版本。HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示往前100个版本。

[cpp] 

  1. #回退到上一个版本  

  2. $ git reset --hard HEAD^  

  3. HEAD is now at a25c588 amend modify JackyData02  

现在看看,JackyGit/JackyData03是不是又回来了。

2.版本选择

这时我们再看看操作日记。

[cpp] 

  1. #只剩3个操作了,移除JackyData03的操作不见了  

  2. $ git log --pretty=oneline  

  3. a25c58804cb3f4045564fc0ec6a4e6eb4dae7072 amend modify JackyData02  

  4. cba8800f2daaf4075a506b6d763798ea15ba11cc modify JackyData01  

  5. aea0365712908805bc28540b4db9fd2f15360a8b init AddFiles  

现在我又后悔了,想回到JackyData03被移除的状态。

(1)如果git bash没被关掉,向前滚动找到

[cpp] 

  1. #移除JackyData03文件的版本号  

  2. c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03  

有了这个版本号,我们就可以这么做

[cpp] 

  1. #还是使用reset,直接选择要切换的版本号  

  2. $ git reset --hard c5c83c  

  3. HEAD is now at c5c83cf remove JackyData03  

当然版本号可用不用完全输入,输入前几个git就会帮你找到,也不能太少,太少可能会找出多个。

可以看到提示HEAD现在处在c5c83c这个版本位置。

(2)如果git bash被关掉了,找不到版本号了怎么办?

git reflog可以显示每一次的操作记录。

[cpp] 

  1. $ git reflog  

  2. c5c83cf HEAD@{0}: reset: moving to c5c83c  

  3. a25c588 HEAD@{1}: reset: moving to HEAD^  

  4. c5c83cf HEAD@{2}: commit: remove JackyData03  

  5. a25c588 HEAD@{3}: commit (amend): amend modify JackyData02  

  6. a5f6601 HEAD@{4}: commit: modify JackyData02  

  7. cba8800 HEAD@{5}: commit: modify JackyData01  

  8. aea0365 HEAD@{6}: commit (initial): init AddFiles  

然后再使用reset命令,就可以随意选择版本了。

3.撤销修改

3.1.工作区

再修改点东西。

[cpp] 

  1. #修改JackyData01内容  

  2. $ echo "GoodBye SVN" > Jackydata01  

看一下状态

[cpp] 

  1. #看一下状态,Jackydata01在工作区被修改了(红色高亮)  

  2. $ git status  

  3. # On branch master  

  4. # Changes not staged for commit:  

  5. #   (use "git add <file>..." to update what will be committed)  

  6. #   (use "git checkout -- <file>..." to discard changes in working directory)  

  7. #  

  8. #       modified:   Jackydata01  

  9. #  

  10. no changes added to commit (use "git add" and/or "git commit -a")  

现在我后悔了(最后一次),想要撤销删除怎么办?

git checkout --file可以撤销工作区的修改

[cpp] 

  1. #撤销JAckydata01的改动  

  2. $ git checkout -- Jackydata01  

  3.   

  4. #看一下当前Git仓库的状态,干净的  

  5. $ git status  

  6. # On branch master  

  7. nothing to commit, working directory clean  

3.2.暂存区

再改Jackydata01的内容。

[cpp] 

  1. #修改JackyData01内容  

  2. $ echo "GoodBye SVN" > JackyData01  

这次手太快了,直接把修改的内容add到暂存区了。

[cpp] 

  1. #修改内容add到暂存区  

  2. $ git add Jackydata01  

  3.   

  4. #看一下状态,JackyData01在被修改了,并add到暂存区(绿色高亮)  

  5. yf005@yf005 /d/jackygit (master)  

  6. $ git status  

  7. # On branch master  

  8. # Changes to be committed:  

  9. #   (use "git reset HEAD <file>..." to unstage)  

  10. #  

  11. #       modified:   Jackydata01  

  12. #  

嗯,没错你猜对了。我后悔了(节操呢?),这时要怎么办?

这时直接使用git checkout --file是无效的。

必须先使用git reset HEAD file把暂存区的修改撤回到工作区的修改。

[cpp] 

  1. #撤回到工作区的修改  

  2. $ git reset HEAD Jackydata01  

  3. Unstaged changes after reset:  

  4. M       Jackydata01  

  5.   

  6. #看一下当前状态,未添加到暂存区(红色高亮)  

  7. $ git status  

  8. # On branch master  

  9. # Changes not staged for commit:  

  10. #   (use "git add <file>..." to update what will be committed)  

  11. #   (use "git checkout -- <file>..." to discard changes in working directory)  

  12. #  

  13. #       modified:   Jackydata01  

  14. #  

  15. no changes added to commit (use "git add" and/or "git commit -a")  

这个时候重复3.1.工作区内的撤销修改即可。

3.3.已提交到版本库

如果已经提交到版本库,那么使用1.版本回退功能吧。

3.4.其他撤销指令

其他撤销指令诸如git clean和git revert请自行尝试。

转载于:https://my.oschina.net/xiaoxiao23/blog/190519

你可能感兴趣的文章
log4net 使用
查看>>
通过bat文件运行jar包程序
查看>>
关于hive RegexSerDe的源码分析
查看>>
V$INSTANCE视图
查看>>
OpenCart之侧边浮动联系我们表单(Side Contact Us Form)
查看>>
PureWhite OpenCart 商城自适应主题模板 ABC-0009
查看>>
docker整理文档
查看>>
zabbix安装配置
查看>>
Awk练习笔记
查看>>
RAID级别详解,如何在Linux下实现软RAID图文解析。
查看>>
CentOS 配置***客户端
查看>>
线上应用故障排查之二:高内存占用
查看>>
书写「简历」时,需要规避的错误
查看>>
我的友情链接
查看>>
老毛桃 win7
查看>>
continue
查看>>
myeclise10安装svn的方法
查看>>
第四次作业
查看>>
4196. [NOI2015]软件包管理器【树链剖分】
查看>>
Apache Spark源码走读之20 -- ShuffleMapTask计算结果的保存与读取
查看>>