美文网首页
Git学习笔记(一)

Git学习笔记(一)

作者: 苦寒行 | 来源:发表于2017-04-23 17:21 被阅读59次

    本文主要分为以下几个方面:

    • Git简介
    • Git工作流程及原理
    • Git基本操作
    • Git分支管理
    • Github远程仓库

    git简介

    Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
    Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
    Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

    Git工作流程及原理

    Git工作流程

    image

    一般使用流程如下:

    • 1.克隆资源作为工作目录,该资源可以是存放在本地git仓库中,或者存放在github在线仓库中。
    • 2.在克隆的资源上添加或者修改文件。
    • 3.如果是多人开发,可以随时从代码库中更新本地资源
    • 4.在提交前查看修改
    • 5.提交修改
    • 6.在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

    Git原理

    iamge

    可以通过“git init”命令创建一个git本地仓库,创建好的git体系可以分为三个部分:

    • 工作区:工作区就是我们本地的目录
    • 暂存区:暂存区是一个索引文件,是上图中的index区,其位于“.git”目录下的index文件中(.git/index)(索引文件是一个目录结构,内容是相应文件的存放地址,真实的文件数据全部在对象库中存放,是上图中的objects)
    • 版本库:上图中除去index区,剩下的组成了版本库

    对上图的解析

    图中的head是一个“游标”,其指向当前有效的分支,master是当前有效分支的目录树。
    objects是Git的对象库,位于“.git/objects"目录下,里面包含了创建的各种对象及目录。
    结合流程,我们的所有工作将在工作区进行,当我们使用”git add”命令后,我们修改的内容将提交到对象库的一个新对象中,并将该对象的id写入暂存区的文件索引中。
    当执行“git commit”命令后,暂存区的目录树会整体写入对象库中,且master分支目录树将更新为暂存区提交的目录树。
    当执行“git reset HEAD”命令后,将会使用master分支的目录树替换暂存区中的目录树,即用版本库中的文件替换暂存区的文件,但是工作区不受影响。
    当执行“git rm --cached <file>”命令,会从暂存区直接删除文件,但是工作区不会受到影响。
    当用“git checkout .”或者“git checkout --<file>”命令,会用暂存区文件代替工作区文件。
    当用“git checkout HEAD .”或者“git checkout HEAD <file>”命令,会用head指向的master分支中的全部或者部分文件代替暂存区和工作区的文件。

    git基本操作

    test目录下有一个test.js文件,作用是输出一段话

    Paste_Image.png
    • git init:该命令初始化一个git仓库
      使用当前仓库作为git仓库:git init
      使用指定目录作为git仓库:git init newrepo
    Paste_Image.png

    使用git init命令之后会在当前目录创建一个.git目录。

    • git add:可以将文件提交到暂存区
      我们将test.js提交到暂存区
    Paste_Image.png

    可以看到,提示我们一个新的文件被提交到暂存区且可以用“git rm -cached <file>”来删除它

    • git status:查看自上次提交之后文件是否有更改,我们修改test.js
    Paste_Image.png

    再次使用git status可以看到test.js前面变成了AM,只是指该文件在上次提交之后发生了变化。

    • git diff
      执行 git diff 来查看执行 git status 的结果的详细信息。
      git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。
      尚未缓存的改动:git diff
      查看已缓存的改动: git diff --cached
      查看已缓存的与未缓存的所有改动:git diff HEAD
      显示摘要而非整个 diff:git diff --stat

    可以看到我们做出的修改

    • git commit
      之前我们的所有操作都只是提交到了暂存区,而git commit可以将暂存区中的内容提交到git仓库中。
    Paste_Image.png

    使用git log可以看到我们的提交成功。

    • git reset HEAD:版本回滚,可以取消git add的添加,但是不影响工作区,我们在创建一个test1.js,然后提交,但是版本库中只保存了test.js
      所以我们用git reset HEAD命令后,暂存区中的内容将被HEAD指向的分支所替代。
    Paste_Image.png
    • git rm
      git rm 会将条目从缓存区中移除。这与 git reset HEAD 将条目取消缓存是有区别的。
      默认情况下,git rm file 会将文件从缓存区和你的硬盘中(工作目录)删除。
      如果你要在工作目录中留着该文件,可以使用 git rm --cached。
    Paste_Image.png Paste_Image.png

    可以看到,工作区和暂存区文件都被删除了。

    • git mv:该命令等同于git rm --cached。
    • git clone:该命令可以复制要给指定的代码仓库,将放在github中介绍

    Git分支管理

    分支是git一个十分重要的特性,常用命令如下:

    • git branch:列出所有分支
    • git branch (branchname):创建分支
    • git checkout (branchname):切换分支
    • git merge:合并分支
    • git branch -d(branchname):删除分支

    如上图,我们创建了一个分支branchTest,并用git branch查看,*指明我们当前使用的分支。

    Paste_Image.png

    这是master分支的所有信息,test.js输出我们的分支名称,下面我们切换到branchTest分支:

    Paste_Image.png

    可以看到切换后的起点和master分支节点最后快照相同,现在我们在该分支下创建test1.js并提交:

    Paste_Image.png

    可以看到我们创建test1.js并使其输出该分支名称,下面我们切换回主分支并合并,合并后branchTest分支新创建的test1.js会并入master分支,但是当修改过同一个文件之后,并入操作不能成功,会出现冲突,此时只能通过手动修改消除冲突。

    Github

    稍后介绍。

    相关文章

      网友评论

          本文标题:Git学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/dsbszttx.html