【Git入门之五】版本管理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.版本回退

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

[cpp] view plaincopy

  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] view plaincopy

  1. #回退到上一个版本  

  2. $ git reset --hard HEAD^  

  3. HEAD is now at a25c588 amend modify JackyData02  

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


2.版本选择

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

[cpp] view plaincopy

  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] view plaincopy

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

  2. c5c83cfcdb25c67a5c66b4fe3844d0ea912830ec remove JackyData03  

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

[cpp] view plaincopy

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

  2. $ git reset --hard c5c83c  

  3. HEAD is now at c5c83cf remove JackyData03  

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

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

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

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

[cpp] view plaincopy

  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] view plaincopy

  1. #修改JackyData01内容  

  2. $ echo "GoodBye SVN" > Jackydata01  

看一下状态

[cpp] view plaincopy

  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] view plaincopy

  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] view plaincopy

  1. #修改JackyData01内容  

  2. $ echo "GoodBye SVN" > JackyData01  

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

[cpp] view plaincopy

  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] view plaincopy

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 进阶——单例模式

一、单例模式概念及特点 Java中单例模式是一种常见的设计模式&#xff0c;单例模式分三种&#xff1a;懒汉式单例、饿汉式单例、登记式单例三种。 单例模式有一下特点&#xff1a; 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其…

Java 关键字—— static 与 final

static表示“全局”或者“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;也可以形成静态static代码块&#xff0c;但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&am…

Java 三大特性之——继承

继承(inheritance)是面向对象的重要概念。继承是除组合(composition)之外&#xff0c;提高代码重复可用性(reusibility)的另一种重要方式。我们在组合(composition)中看到&#xff0c;组合是重复调用对象的功能接口。我们将看到&#xff0c;继承可以重复利用已有的类的定义。 类…

基于Linux的 Open×××网络之网络架构应用实例

基于Linux的 Open网络之网络架构应用实例Open 概述Open 是一个开源的加密隧道构建工具&#xff0c;基于 OpenSSL 的 SSL/TLS 协议&#xff0c;可以在 Internet中实现点对点的 SSL 安全连接。使用 Open 的好处是安全、易用和稳定&#xff0c;且认证方式灵活&#xff0c;具备实现…

Java 进阶——自动装箱和自动拆箱

1、什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候&#xff0c;我们会这样&#xff1a; Class a new Class(parameter); 当我们创建一个Integer对象时&#xff0c;却可以这样&…

基于KVM的虚拟化研究及应用

引言 虚拟化技术是IBM在20世纪70年代首先应用在IBM&#xff0f;370大型机上&#xff0c;这项技术极大地提高了大型机资源利用率。随着软硬件技术的迅速发展&#xff0c;这项属于大型机及专利的技术开始在普通X86计算机上应用并成为当前计算机发展和研究的一个热点方向。目前&am…

Java 进阶—— super 和 this 的用法

一、this Java关键字this只能用于方法方法体内。当一个对象创建后&#xff0c;Java虚拟机&#xff08;JVM&#xff09;就会给这个对象分配一个引用自身的指针&#xff0c;这个指针的名字就是this。因此&#xff0c;this只能在类中的非静态方法中使用&#xff0c;静态方…

unity中脚本编辑器UnIDE

引言 unity默认脚本编辑器是MonoDevelop&#xff0c;随着unity4.3面世&#xff0c;MonoDevelop (4.0.1)版本也随之而来&#xff0c;更新为界面更改和bug自动修复功能等&#xff0c;具体还未使用。 点击unity的Edit下的属性(preference)&#xff0c;可以更改默认脚本编辑器&…

apk,task,进程区别

2019独角兽企业重金招聘Python工程师标准>>> apk&#xff0c;task&#xff0c;进程区别 apk一般占一个dalvik,一个进程&#xff0c;一个task。通过设置也可以多个进程,占多个task。 task是一个activity的栈&#xff0c;其中"可能"含有来自…

Java 线程 —— 基础篇

一、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 进程是指一个内存中运行的应用程序&#xff0c;每个进程都有自己独立的一块内存空间&#xff0c;一个进程中可以启动多个线程。比如在Windows系统中&#xff0c;一个运行的exe…

【Java并发性和多线程】线程安全及不可变性

2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接&#xff1a;http://tutorials.jenkov.com/java-concurrency/thread-safety-and-immutability.html 译文链接&#xff1a;http://ifeve.com/thread-safety-and-immutability/ 当多个线程同时访问…

Java 高级—— IO 基础

一、File 类 先看一下File 类的定义 [java] view plaincopy public class File extends Object implements Serizliable Comparable<File> 从定义看&#xff0c;File类是Object的直接子类&#xff0c;同时它继承了Comparable接口可以进行数组的排序。 File类的操作包括…

安装 SharePoint 2013 Foundation

一、Foundation版本的区别Foundation版本的区别见附件&#xff08;英文&#xff09;。官网下载地址 http://www.microsoft.com/zh-cn/download/details.aspx?id35488二、安装必备软件三、独立安装模式1. 启动安装向导2. 接受软件许可条款3. 选择服务器类型和数据位置4. 结束安…

Java 异常处理机制

异常处理是程序设计中一个非常重要的方面&#xff0c;也是程序设计的一大难点&#xff0c;从C开始&#xff0c;你也许已经知道如何用if...else...来控制异常了&#xff0c;也许是自发的&#xff0c;然而这种控制异常痛苦&#xff0c;同一个异常或者错误如果多个地方出现&#x…

架构师未来性的基础:简单性

作者&#xff1a;高焕堂&#xff0c;misoo.twqq.com 首页&#xff1a;Backee e架构师未来性的基础&#xff1a;简单性 Apple公司创始人乔布斯(Steve Jobs)曾说到&#xff1a;“简单比复杂更难&#xff0c;你必须努力让你的想法变得清晰…

Android 基础—— 对Context的理解与使用技巧

一、Context 基础概念 1、什么是Context 1) Context是一个抽象类&#xff0c;其通用实现在ContextImpl类中。 2) Context&#xff1a;是一个访问application环境全局信息的接口&#xff0c;通过它可以访问application的资源和相关的类&#xff0c;其主要功能如下&a…

Android 四大组件 —— 广播(广播机制解析)

在网络通信中&#xff0c;一个IP网络范围中最大的IP 地址是被保留作为广播地址来使用的。比如某个网络的IP 范围是192.168.0.XXX&#xff0c;子网掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一网络上的所有端口&#xff…

Android 基础 —— 活动的生存周期

一、返回栈 Android 中的活动是可以层叠的。我们每启动一个新的活动&#xff0c;就会覆盖在原活动之上&#xff0c;然后点击Back 键会销毁最上面的活动&#xff0c;下面的一个活动就会重新显示出来。 其实Android 是使用任务&#xff08;Task&#xff09;来管理活动的&#xff…

产品经理做市场调研和数据分析的方法

产品经理&#xff0c;你对用户的需求了解多少呢&#xff1f;你知道用户想要什么样的产品吗&#xff1f;你想知道用户将会如何看待你的产品吗&#xff1f;你想知道你设计的产品在用户中的口碑如何吗&#xff1f; 是 的。每一个产品经理都希望在产品开始立项设计前&#xff0c;得…

Android 基础 —— 活动的启动模式

活动的启动模式来说应该是个全新的概念&#xff0c;在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有四种&#xff0c;分别是standard、singleTop、singleTask 和singleInstance &#xff0c; 可以在AndroidManifest.xml 中通过给<activity…