zoukankan      html  css  js  c++  java
  • Git

     我们从一点一滴开始学习Git.满足我们日常的开发需求

     1. 安装

      1)Windows下的安装

        到Git for Windows上下载git bash 即可在命令行中愉快的使用git了

      2)Linux下的安装

        源码安装:

    http://git-scm.com/ 或github上下载源代码
    
    wget -c https://github.com/git/git/archive/v2.23.0.tar.gz
    
    tar zxvf v2.23.0.tar.gz
    
    // 可根据 目录下的安装文件进行安装 INSTALL
    
    make prefix=/usr all doc info
    
    make prefix=/usr/local install
    
    
    git安装完毕。/usr/local/bin

      yum安装:

    yum install curl-devel expat-devel gettext-devel 
      openssl-devel zlib-devel
    
    $ yum -y install git-core
    
    $ git --version
    git version 1.7.1

    2.基础概念

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库

     

      图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。

      图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

      图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

      当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

      当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

      当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

      当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。

      当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

      当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

    3. 配置信息

       git config 的工具,专门用来配置或读取相应的工作环境变量

      这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

    • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
    • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件
    • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

      1)查看配置信息

    git config --list
    

      编辑配置内容

    vim ~/.git/gitconfig
    

      查看某个配置

    git config user.name  
    

      2)配置个人名称和邮箱地址

    1 $ git config --global user.name "name"
    2 $ git config --global user.email email@email.com

      3)设置使用的编辑器

    $ git config --global core.editor vim
    

      4)差异分析工具

    $ git config --global merge.tool vimdiff
    

      

      

     4.常用使用

      1)查看git版本

        git --version

      2)将工作区中的文件添加到暂存区

        git add 文件名称/*(提交所有)

      3) 将暂存区中的文件退回到未添加的状态

        git rm --cached 要退回的文件

      4)创建版本库

        使用当前目录为GIT仓库,则直接使用    git init 就会在当前目录下产生一个.git目录   该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。

        制定目录为Git仓库,   则  git init 目录名称

      5)已有版本库的情况

        直接将现有的版本库克隆到本地      

    1 git clone <repo>//仓库
    2 
    3 git clone <repo> <directory>  //指定目录
    4 
    5 
    6 //事例
    7 $ git clone git://github.com/xing/test.git test
    //可以指定用户名/邮箱+密码
    git clone git://用户名:密码@github.com/xing/test.git test

      6)显示版本信息(状态)

    1 git status  //显示代码完整状态信息(相当于git status --long)
    2 
    3 git status -s //显示代码简短状态信息(只显示变化的文件)

      ??: 新增加的状态但是还没有提交到缓存中

           A:已经将工作区的文件提交到了缓存中

           AM: 已经提交过缓存文件但是又进行了修改,   (这种情况: 修改之后  再次执行git add 即可)

      7)查看执行 git status 的结果的详细信息(都是针对已经进行add的文件)

        git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别

      •   尚未缓存的改动:git diff
      •   查看已缓存的改动: git diff --cached
      •   查看已缓存的与未缓存的所有改动:git diff HEAD
      •   显示摘要而非整个 diff:git diff --stat

      8)将缓存区中的内容提交到版本库(使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中)

        git commit 命令 提交到版本库

        Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址

        对于已经添加过缓存区的文件,由于后期的修改,需要进行重新add 并提交  所以可以进行简化处理

        

    git commit -am '修改 hello.php 文件' // -a 直接进行提交 -m 注释信息
    

      

          9取消已缓存的内容

        

    git reset HEAD   // 使用  git reset HEAD -- 文件名称
    

       git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。

    5. 版本分支

     1) 创建分支

    git checkout -b 分支名称     创建分支 并切换到该分支之下
    
    or
    
    git brank 分支名称
    git checkout 分支名称


    git push origin 分支名。# 提交分支到远程仓库
     

     2)删除分支

    git branch -d 分支名称

    git branch -D 分支名称 # 强制删除

    git push origin --delete 分支名。# 删除远程分支

    3)查看分支

    git branch # 查看当前分支
    
    git branch -a # 查看所有分支

     6.忽略文件

      一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。来看一个实际的例子:

      

    $ cat .gitignore
    *.[oa]
    *~

    第一行告诉 Git 忽略所有以 .o.a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的,我们用不着跟踪它们的版本。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。此外,你可能还需要忽略 logtmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

    文件 .gitignore 的格式规范如下:

    • 所有空行或者以注释符号 开头的行都会被 Git 忽略。
    • 可以使用标准的 glob 模式匹配。
    • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
    • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

    所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。

    我们再看一个 .gitignore 文件的例子:

    # 此为注释 – 将被 Git 忽略
    # 忽略所有 .a 结尾的文件
    *.a
    # 但 lib.a 除外
    !lib.a
    # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
    /TODO
    # 忽略 build/ 目录下的所有文件
    build/
    # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    doc/*.txt
    # 忽略 doc/ 目录下所有扩展名为 txt 的文件
    doc/**/*.txt

    6. 版本回退

    1. 查看历史提交的版本
    git log 
    
    格式化: git log --pretty=oneline
    
    
    2.版本回退
    根据ID回退到指定的版本
    
    git reset --hard 7222c8f6be2d663982faa98dffe2647966b438b1
    
    
    3. 推送本地到远程仓库
    
    git push origin HEAD --force
    
    
    4. 查看命令操作历史
    
    git reflog

    5. 查看远程代码库信息
    git remote show origin

  • 相关阅读:
    【BZOJ4337】[BJOI2015] 树的同构(哈希水题)
    【BZOJ4176】Lucas的数论(杜教筛)
    【BZOJ2627】JZPKIL(数论大杂烩)
    【BZOJ2228】[ZJOI2011] 礼物(巧妙的三部曲)
    【BZOJ2954】[POI2002] 超级马(暴搜)
    【BZOJ4498】魔法的碰撞(动态规划)
    【BZOJ3489】A simple rmq problem(三维数点)
    【BZOJ2626】JZPFAR(KD-Tree)
    【BZOJ4520】[CQOI2016] K远点对(KD-Tree)
    【BZOJ1941】[SDOI2010] Hide and Seek(KD-Tree)
  • 原文地址:https://www.cnblogs.com/xingxia/p/git_operate.html
Copyright © 2011-2022 走看看