zoukankan      html  css  js  c++  java
  • git学习记录——基础概念和文件的基本操作

    夸一下git

    git是当前世界上最先进的分布式版本控制系统

    优势:

    1.不必联网

    2.Git极其强大的分支管理,把SVN等远远抛在了后面。

    集中式的代表CVS和SVN

    分布式的代表BitKeeper,git,类似Git的Mercurial和Bazaar

    git是最快最简单流行的分布式版本控制系统

    安装git

    创建版本库

    版本库又叫responsitory,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

    $cd Desktop/git  //到自己的目录
    
    $mkdir learngit  //创建文件
    
    $pwd         //pwd命令用于显示当前目录
    
    $git init      //init可以初始化一个仓库 , 文件目录下多了一个隐藏文件.git
    

    把文件添加到版本库

    添加文件之前,所要注意的文件相关的事项:

    首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道

    Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的

    因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

    使用Windows的童鞋要特别注意:

    千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可

     git add readme.txt  文件添加到仓库 注意,可反复多次使用,添加多个文件

     git commit -m "write a readme file"  提交文件到仓库

    查看当前状态和修改说明

    git status 查看当前文件状态,是否被修改过之类的

    git diff <file> 查看文件修改前后的差异

    git log 查看修改日志,git就像游戏存档一样把所有的修改存起来,没修改依次都会存一下它的修改的地方呀,时间呀,还有修改的人名

     

     友情提示:你看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

     每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线

    版本回退

    git reset --hard HEAD^    //回退一个版本

    git reset --hard HEAD^^   //回退两个版本

    git reset --hard HEAD~100  //回退一百个版本

    这段代码的语义补那么一目了然了,

    首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交19dbc79500216239b12e3d9376cbf0a3710800eb(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    版本向前

    那么会退了后悔了怎么办

    git reflog 可以查看修改记录

    这个log日志只能看到自己的提交时的commit

    所以一定要写好commit,这无疑是一个优秀的习惯

    git reset --hard HEAD@{1} 格式和版本回退一样,但是不是^或者~而是@{},这个意味着到达某个自己曾今的地方

    这就是git中的时光机了

    工作区和暂存区

    工作区(Working Directory)

    就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区

    版本库(Repository)

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

     分支和HEAD的概念我们以后再讲。

    前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    管理修改

    git操作的是修改,管理的是修改而不是文件

    撤销修改

    git checkout --readme.txt

    这个是丢弃工作区的修改,有别人git reset --hard HEAD操作

    这个操作相对于删除也可以撤销

    返回到上一次的git add或者git commit ,到底返回到哪一个呢,这个得看你得操作是在add到commit之间还是commit到还未继续add

  • 相关阅读:
    boost库:函数对象
    boost库:智能指针
    linux 查看和修改文件时间
    linux正则表达式
    UVA
    UVA
    UVA
    UVA
    UVA
    对JavaScript的认识?
  • 原文地址:https://www.cnblogs.com/sowhite/p/6385599.html
Copyright © 2011-2022 走看看