近期公司用Git来管理代码,用起来是要比svn爽一些。就是刚接触的时候比較痛苦,特别是那些状态(版本号的提交/合并/回退)。差点把我搞晕了。

如今回过头来总结一下,就清楚多了。

         就本地仓库来看。Git能够分成5个不同的状态。能够通过$ git status来查看。这五个状态能够互相转换。详细操作详见以下的“版本号回退/整合”。

         当然。有些文件非常实用。不能删除又不能提交,如Eclipse的项目文件. project等。

这样的情况最好就是选择把他们忽略掉,能够通过改动根文件夹的.gitignore文件,或者update-index来忽略掉。

status

         显示Git的版本号管理信息:$ git status

一般分成3个区域:

a)  Changes to becommitted:暂存区中有改动的文件,但还没commit。

b)  Changes notstaged for commit:工作区中已跟踪且有改动的文件,但还没add;

c)  Untrackedfiles:工作区中未跟踪文件。未纳入Git的管理,每一个新建的文件都属于这样的。

         从上面也能看出非常多操作的提示。

[Changes notstaged for commit]和[Untracked files]都能够通过add把文件加入到[Changes to be committed]。

另外,还能够使文件消失在Git的监控范围(ignore掉),这样status就看不到了。

         也能够使用简略的显示模式:$ git status –s

版本号回退 / 整合

         依据之前工作区/暂存区/版本号库的状态跳转图,可知道回退也是有多种情况。

 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

a)     Untrack区回退

         Untrack区存放的是没有纳入Git跟踪的文件。如新创建的还没add的文件。一般Git是不会理会这部分文件的,假设你嫌碍眼,能够通过clean来清楚他们:

         先通过$ git clean –n查看要会清楚的文件,然后把n去掉,清除。也能够在后面指定文件名称,文件-f,文件夹-d。

b)     工作区回退

         $ git checkout -- XXX意思是,把XXX文件在工作区的改动所有撤销:先检查暂存区有没有XXX,假设有则把工作区的XXX恢复到暂存区的状态;假设没有,则到版本号库取。

         $ git checkout . 撤销所有工作区的改动。

这个命令事实上挺危急的。一运行记录都被恢复了,改动都被丢弃了。也能够用$ gitcheckout HEAD XXX。回退暂存区和工作区。

c)      暂存区回退

         面的checkout --仅仅是撤销工作区的文件改动,假设我们想撤销暂存区的,就须要使用$ gitreset HEADXXX。它会把暂存区的记录清空掉。

我们通过$ git status就能看到Changes to be committed的内容都跑到Changes notstaged for commit中去了。

也能够用$ git checkout HEAD XXX,回退暂存区和工作区。

         对于暂存区来说。这样的方式和commit都会清空记录。前者直接清空,后者先往版本号库写。再清空。

d)     版本号库回退

         假设你不小心把脏内容commit到本地master了,上面两种方式就无效了。这时候须要回退版本号库:$ git reset--hardHEAD^

         在Git中,用HEAD表示当前版本号。上一个版本号就是HEAD^,上上一个版本号就是HEAD^^。也能够写成HEAD~2。你能够用HEAD后面加n个^。或者HEAD~n来表示回退多少个版本号。

         上面是相对版本号的reset,当然也能够指定某一个详细版本号。这时候commitID版本号号就大派用场:  $ git reset --hard

3628164仅仅是版本号的前一小部分,Git会帮我们去自己主动匹配。当然也有可能找到多条。所以还是写全比較靠谱。

 

         事实上对于Git来说。HEAD是一个当前版本号号的指针,用reset来切换版本号。实际上是调整HEAD的指向。

         所以。假设你reset 到HEAD~10。还行又回去原来的HEAD,那么也能够通过【reset+ 版本号号】的方式切换过去。

         当然你要知道相应的版本号号,这时候你能够通过 $ git relog 来查看你的命令历史和相相应的版本号号。

 

e)     远程版本号回退

         Git是分布式版本号控制系统,仅仅要你把内容push出去了,那么远程库就会有记录,你也不能主动改动别人的版本号,这时候就仅仅能覆盖了。

可是你干过的坏事也就公诸于世了。

 

回退merge

         假设仅仅是在merge。则能够直接回退: $ git reset--hard HEAD^

         假设merge 以后还有别的操作和改动,则能够使用revert:

$ git revert -m merge线的编号  (从1開始计算,或者merge前的版本号号)

 

★ 版本号整合

         东西已经commit了。可是又想改动,怎么办呢?能够通过上面“版本号库回退”的方法来实现:reset再commit。可是那样commit的改动就没有了,须要又一次改动,工作量大。

         所以除此之外。我们还能够:

l  假设仅仅是合并已commit的版本号:$ git rebase -i HEAD~2

l  假设有补充的改动:$ git commit --amend

Git的状态转换的更多相关文章

  1. Git现实(四)状态转换

    前Git实战(三)环境搭建博文.我们大致解说了一下git的环境安装.今天我们解说一下Git的状态转换. 学习版本号控制工具.对工具进行版本号控制之间的状态转换很重要. 毕竟Git仅仅是一个工具,假设不 ...

  2. Git实战(四)状态转换

    上次的Git实战(三)环境搭建博文.我们大致解说了一下git的环境安装,今天我们解说一下Git的状态转换. 学习版本号控制工具.对工具进行版本号控制之间的状态转换很重要.毕竟Git仅仅是一个工具.假设 ...

  3. Git 文件状态的转换

    很好低使用git 文件的状态转换的了解是非常重要的. 文件转换状态其实可以分为四种: untracked:未跟踪,此文件在工作区中,但并没有加入git库,不参与版本控制. 通过”git add”,”g ...

  4. java 22 - 18 多线程之 线程的状态转换、线程组

    线程的状态转换图解:图片 线程的线程组: 线程组: 把多个线程组合到一起.    它可以对一批线程进行分类管理,Java允许程序直接对线程组进行控制. 首先创建一个Runnable的实现类 publi ...

  5. TCP 连接建立和断开,以及状态转换

    1. TCP报文结构 TCP是一种可靠.面向连接.全双工的传输层协议,其报文格式如下所示:      源端口.目的端口:16位长.标识出远端和本地的端口号.     顺序号:32位长.表明了发送的数据 ...

  6. JAVA线程间的状态转换

    线程间的状态转换:  1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运 ...

  7. TCP状态转换

    最近笔试遇到一个题目:如果tcp建立连接时第三次握手失败,tcp会做何操作?该问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解.只要理解了下面的状态转换图,很容易回答上述问题. 在此,将& ...

  8. Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)

    线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...

  9. Java线程状态转换

    前言:对于Java线程状态方面的知识点,笔者总感觉朦朦胧胧,趁着最近整理资料,将Java线程状态方面的知识点总结归纳,以便加深记忆. 1.Java线程状态值 在Thread类源码中通过枚举为线程定义了 ...

随机推荐

  1. 一、python基础相关知识体系

    python基础 a. Python(解释型语言.弱类型语言)和其他语言的区别? 一.编译型语言:一次性,将全部的程序编译成二进制文件,然后在运行.(c,c++ ,go) 运行速度快.开发效率低 二. ...

  2. Thinking in java基础之集合框架(转载)

    集合简介(容器)把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成一个东西(一个对象),然后我们借用袋子把这20个苹果装起来,而这个袋子就是集合(也叫 ...

  3. webpack分离第三方库(CommonsChunkPlugin并不是分离第三方库的好办法DllPlugin科学利用浏览器缓存)

    webpack算是个磨人的小妖精了.之前一直站在glup阵营,使用browserify打包,发现webpack已经火到爆炸,深怕被社区遗落,赶紧拿起来把玩一下.本来只想玩一下的.尝试打包了以后,就想启 ...

  4. 前端读者 | Javascript设计模式理论与实战:状态模式

    本文来自 @狼狼的蓝胖子:链接:http://luopq.com/2015/11/25/design-pattern-state/ 在软件开发中,很大部分时候就是操作数据,而不同数据下展示的结果我们将 ...

  5. hdu多校第三场

    Problem D. Euler Function 思路:打表找找规律. #include<bits/stdc++.h> #define LL long long #define fi f ...

  6. CentOS7安装和配置samba

    (1)samba简介 CIFS:通用的internet文件系统,windows和unix系统之间共享文件的一种协议;客户端主要是windows:支持多节点同时挂载以及并发写入 (2)samba主配置文 ...

  7. OpenStack 认证服务 KeyStone部署 (四)

    Keystone作用: 用户与认证:用户权限与用户行为跟踪: 服务目录:提供一个服务目录,包括所有服务项和相关Api的断点 SOA相关知识 Keystone主要两大功能用户认证和服务目录(相当于一个注 ...

  8. react native redux saga增加日志功能

    redux-logger地址:https://github.com/evgenyrodionov/redux-logger 目前Reac native项目中已经使用redux功能,异步中间件使用red ...

  9. 归并排序(MergeSort)

    原帖:http://blog.csdn.net/magicharvey/article/details/10192933 算法描述 归并排序(MergeSort)是采用分治法的一个非常典型的应用.通过 ...

  10. js for循环的陷阱

    ☞问题概述 一页面有三个按钮,点击提示相应内容.相应内容已从后台获取,并转化成json数组. var content = ["提示1", "提示2", &quo ...