Git学习

初次使用GIT前的配置

  • 在命令行里输入如下命令:
    git config --global user.name "用户名"
    git config --global user.email "邮箱"
    

理论基础

  • Git记录的是什么
    • 使用过svn的都知道,它记录的是每一次版本变动的内容
    • Git则是将每个独立的版本独立保存
  • 三棵树
    • 工作区域 Working Directory :平时放代码项目的地方
    • 暂存区 Stage (Index) :临时存放你的改动,只是一个文件,保存即将提交的文件列表信息
    • Git仓库:存放数据的位置。其中,HEAD指向最新放入仓库的版本

查看状态

git status    //查看当前工作目录状态,这个命令下,你可以看到,在你的工作目录中些文件是没有上             传到服务器上的,也意味这这些文件是不会受到服务器管理的,即使这些文件在你的工作区域下。
              //MIT协议(很开放的一种协议)
git reset HEAD       //恢复到暂存区上一次的状态,不指定文件,恢复到暂存区域的状态
git checkout --     //将暂存区的文件覆盖工作区域已有的文件  (用的时候要慎重)
git log     //查看历史提交目录
git commit -m ""     //这里 -m 是对添加文件时的注释

回到过去

git reset --mixed HEAD~   //影响了两个地方
  • 移动HEAD的指向,将其指向上一个快照
  • 将HEAD移动后指向的快照回滚到暂存区域
    git reset --soft HEAD~
    
  • 移动HEAD的指向,将其指向上一个快照;但并不会修改暂存区里的内容;那它的作用是什么呢,其作用时撤消上一次的commit(提交)
    git reset --hard HEAD~
    
  • 移动HEAD的指向,将其指向上一个快照
  • 将HEAD移动后指向的快照回滚到暂存区域
  • 将暂存区域的文件还原到工作目录

    Reset 命令回滚快照三部曲

  • 移动 HEAD 的指向 (--soft)
  • 将快照回滚到暂存区域([--mixed],默认)
  • 将暂存区域还原到工作目录(--hard) (慎重)

    回滚指定快照

    git reset (id号(至少5个))
    

    回滚到个别文件

    git reset 版本快照 文件名/路径    //快照指得是版本,HEAD的指针不会改变
    

版本对比

git diff    //比较暂存区域与工作目录

比较当前工作目录和Git仓库中的快照

git diff --cached [快照ID]

GIT小技巧

修改最后一次提交

  • 在实际开发中,我们可能会遇到这样的问题
    • 版本一刚提交到仓库,突然还有两个文件没有添加
    • 版本一刚提交到仓库,突然想起说明写得不够全面,无法彰显你本次修改的重大意义
  • 执行带 --amend 的选项的 commit 提交命令, Git 就会更正最近的一次提交
  • 删除文件
    git rm 文件名   //这里只是删除工作目录和暂存区域的文件,也就时取消git的跟踪,在下次提交的时候不纳入版本管理。
    
  • 我们可能会遇到这样的情况,先提交了文件到暂存区,然后又对它做了修改
  • 此时我们再用 git 删除它时,git会因为不知道删除那个文件,而报错。因为这两个文件时不一样的可以执行如下命令:
    git rm -f 文件名   //暴力删除
    
  • 还有一种情况,我们只需要删除暂存区域的文件,不需要删除工作目录的文件则执行
    git rm --cached 文件名
    
  • 重命名文件
    git mv 旧的文件名 新的文件名
    

GIT分支

  • svn分支与Git分支的比较
    • 就以克隆一份全新的目录以同样拥有5个分支来说,SVN 时同时复制5个版本的文件,也就是说重复5次同样的动作。而 Git 只是读取每个版本的元素,然后只载入主要的分支(master)。
    • 通常的文件系统是采用增量文件系统来管理文件的。比如说:就是新的快照存放的是旧的快照修改的那一部分的内容。而 Git 则是采用将每个版本独立存存放的形式(看似异端来处理版本迭代)看似耗费很大的空间,其实不然。前者创建分支是需要完整的拷贝一份源代码,这样就会耗费很长时间,Git 就不同了,对 Git来说,每一个节点都是完整的拷贝,完整的副本。所以只需创建多一个指针指向分支开始的位置即可。

      创建分支

      git branch 分支名称
      

      切换分支

      git checkout 分支名
      git log --decorate --oneline //一行显示一个快照
      git log --decorate --oneline --grsph --all  //graph图形化分支,将所有的分支显示出来
      

合并 Git 分支

gti merge 分支名

删除分支

git branch -d 分支名

匿名分支

git checkout     //用来做测试

Checkout 和 Reset 的区别

  • 对于恢复文件级别,这两个都可以使用,并且都不会改变 HEAD 指针的指向
    • reset 是将指定文件恢复到暂存区域,注意:当 reset 后面跟的是一个文件的时候,是不允许使用 soft 和 hard
    • checkout 是同时覆盖暂存区域和工作目录的
    • reset 是将 HEAD 本身以及 HEAD 指向的分支都切到了指定的分支,就是原来的快照已经消失了。
    • checkout 只是将指针切换。

你可能感兴趣的:(Git学习)