Git使用和原理浅析

来源:互联网 发布:卖家怎么加入爱淘宝 编辑:程序博客网 时间:2024/06/05 20:53

Git的使用和工作原理浅析

    • Git的使用和工作原理浅析
          • Git的三棵树工作区域暂存区域Git仓库
          • Git的一般工作流程
          • Git管理文件的三种状态
    • Git使用流程
          • 在本地创建一个Git仓库
          • 为项目添加READMEmd文件
          • 查看Git的工作状态
          • 查看历史提交记录
          • 回到过去
          • reset命令选项

Git的三棵树:工作区域、暂存区域、Git仓库
  • Working Directory:工作目录,即存放项目的地方
  • Stage(Index):暂存区域,临时存放改动,事实上它只是一个文件,保存即将提交的文件列表信息。
  • Repository:Git仓库,安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(这第三棵树,确切的说,应该是 Git 仓库中 HEAD 指向的版本)。
Git的一般工作流程
  • 在工作目录中添加、修改文件
  • 将需要进行版本管理的文件放入暂存区域 add命令
  • 将赞存区域的文件提交到Git仓库
Git管理文件的三种状态
  • 已修改(Modified)
  • 已暂存(staged)
  • 已提交(committed)

Git使用流程

在本地创建一个Git仓库
  • 新建一个文件夹,使用命令行进入该文件夹目录下
  • 使用 git init命令,初始化该文件夹
  • 文件夹下出现.git目录表示创建成功
为项目添加README.md文件
  • 在Git仓库工作目录下新建README.md文件,将README.md的字符编码设置为UTF-8无BOM编码格式,否则可能出现乱码
  • git add README.md命令将文件添加到Git仓库 no news is a good news.
  • git commit -m “add a readme file”,将文件提交到Git仓库,并添加此次修改的说明
查看Git的工作状态
  • git status查看Git的工作状态 ,“nothing to commit,working directory clean.”上次commit之后工作目录中的内容没有被改动过
  • LICENSE文件,版权声明。MIT协议是最为宽松的协议。
  • 再使用git status 查看则会显示Untracked file提示,表示该文件未被Git追踪,即该文件还没有被添加到暂存区域。
  • 此时用git add #file#把该文件添加到暂存区域,再使用git status命令查看,则会显示“Changes to be committed”,此时可以使用git reset HEAD #file#命令恢复暂存区(Git仓库中无提交),即撤销对文件LICENSE的追踪,如果缺省#file#,那么就撤销暂存区所有的文件。
  • 使用git add命令将LICENSE文件添加到暂存区,再使用git commit 命令提交到Git仓库。
  • 此时我们对LICENSE文件进行修改,再次查看git status,”Changes not staged for commit”,即工作目录文件被修改,导致暂存区文件与工作目录不一致。此时git给出了两条建议:1.将工作目录的文件添加到暂存区域(git add) 2.用暂存区域的LICENSE文件覆盖工作区域的LICENSE(git checkout – #file#)
  • 如果文件在暂存区等待提交,我们对工作目录的文件进行修改,再使用git status查看状态,会发现提示”Changes not staged for commit”,暂存区文件与工作目录文件不一致。如果此时直接commit文件,那么是将暂存区的文件提交到Git仓库,如果add,那么是将工作目录的文件添加到暂存区覆盖暂存区的文件。
查看历史提交记录
  • 使用git log 命令查看Git仓库中的文件版本记录,按照时间从晚到早排序。git会为每一次的提交构造一个唯一的ID,用来唯一标识一次提交。
回到过去
  • reset命令和commit命令互逆,add命令和checkout命令互逆
  • 使用git log查看Git仓库的版本提交情况
  • 假如Git仓库中现在有三个版本V1、V2、V3,使用git reset HEAD~命令,表示仓库中的HEAD指向上一版本V2。那么现在版本的快照V2回滚到了哪一棵树(覆盖了哪一棵树中的文件)(Working Directory、Stage、Repository)呢?答案是暂存区域。因为回滚前三棵树的版本都与Git仓库一致,回滚后Git仓库中的V2版本覆盖了暂存区的文件,而工作目录下的文件还是V3,比V2更新,所以提示修改未暂存“Changes not staged for commit”
reset命令选项
  • 默认情况: – mixed ,git – mixed HEAD~ 共有两步操作,第一步移动HEAD的指向,将其指向上一个快照;第二步将HEAD移动后指向的块找回滚到暂存区域。
  • –soft, git reset -soft HEAD~ 共有一步操作:移动HEAD的指向,将其指向上一个快照,不会修改暂存区域的内容。相当于撤销上一次的commit提交。
  • –hard, git reset –hard HEAD~ 共有散三步操作:第一步移动HEAD的指向,将其指向上一个快照;第二步将HEAD移动后指向的快照回滚到暂存区域;第三步将暂存区域的文件还原到工作目录;
  • 回滚指定快照 git reset #版本快照id号#,一般可以只输入前五位
  • 回滚个别文件 git reset #版本快照id号# #文件名/路径#,HEAD指针不会改变
  • 往前滚:git reset #版本快照的id号# 可以将Git仓库的HEAD指针指向指定的版本快照,并将该版本快照回滚到暂存区。注意,这里并没有将暂存区域的快照拉回到工作目录,所以还需要checkout回来,或者直接通过–hard将三棵树统一。