1.git为分布式的版本控制系统,有远程仓库和本地仓库,远程仓库和本地仓库之间建立关联关系后,可将本地仓库的更新push(相当于是内容同步)到远程仓库进行保存,远程仓库的作用相当于一个最终代码备份的地方;

2.git之所以称作分布式的版本控制系统,就是因为git本地仓库的作用,无需连接远程仓库,开发人员即可直接使用本地仓库完成代码在本地仓库中的提交和版本控制,就相当于在本地有一个完全独立的属于自己的版本控制系统。最后只需要在合适的时候,将本地仓库的相应分支推送到远程仓库进行更新同步即可;

3.创建本地仓库的主要方式:

  1).从远程仓库克隆,使用git clone 命令将远程仓库克隆到本地的一个文件夹后,即会建立一个和远程仓库有关联的本地仓库,并且默认也会在本地仓库中创建master分支,也会将本地的master分支和远程仓库的master分支进行关联(即建立追踪关系);

  2)直接从本地使用git init命令进行创建,即在一个文件夹下使用git init命令后,在该文件夹下将生成一个名为.git的隐藏文件夹(该文件夹为git的版本库),有.git文件夹的目录及其子目录中的所有文件将会被git进行跟踪管理(git能够跟踪管理的是文本文件的修改,删除),存在.git隐藏文件夹的文件夹即为本地仓库;

    本地仓库建好后,使用 git remote add origin  git@gitlab.com:XXX/XXX.git 命令添加一个远程仓库(即和一个远程仓库建立关联关系后将代码push到远程),如果该远程仓库已经存在,则直接建立联系,如果不存在则会在远程创建一个名字为XXX.git的仓库(添加远程仓库,最后git push后就会创建);

4.git仓库的结构

  由工作区和版本库构成,如下图:

工作区:就是电脑里能看到的目录,比如上图中的除了.git文件夹之外的所有文件夹及其子目录就属于工作区,这里是开发中存储并修改文件的区域,只要工作区的内容一更新,git就能跟踪到变化。工作区的内容和版本库中的内容是保持同步的,就是通过比较工作区和版本库中的内容来确定工作区中是否有更改内容

版本库:工作区中有一个隐藏目录.git,就是Git的版本库,这个目录是Git来跟踪管理版本的,版本库里存放了已提交的版本,另外其中比较重要的还有state(或者叫index)的暂存区, 还有Git为我们自动创建的第一个分支master(我们在仓库中的工作空间,可以看做是仓库的最小单元,我们所有的操作都是在一个分支上进行的,分支和分支之间是独立的),以及指向master的一个指针叫HEAD。

暂存区(stage):在commit之前暂时存放修改文件的地方。所有需要commit的文件首先都需要加入到暂存区中后才能进行commit.

将文件提交到版本库中需分两步执行:

第一步:使用git add命令将工作区中的修改了的文件添加到暂存区;

第二步:使用git commit命令将暂存区的所有修改文件提交到当前分支(注意提交是提交到某个分支),没有在处在暂存区的修改将不会被提交;

5.git是通过每次commit作为节点进行版本记录。每次commit后都会记录commit时的时间,还会生成一个commit id ,通过id可进行版本的还原。

6.分支:是仓库中的构成单元,仓库中会存在很多分支,我们都是在某一个分支上进行工作(我们工作时都是先进入到仓库的某一个分支后,然后在该分支上执行各种git命令),分支可以理解为不同的工作区(或工作场景),每个分支都对应有自己的工作区文件内容, 切换分支后,工作区中的文件内容也会对应做改变。在某个分支下新建一个分支其实就是基于该分支的当前节点拷贝了一个新的工作区。  有了分支的概念后,我们所使用的git commit, git pull,git push 等命令都是相对于分支来讲的。

7.git 的几个命令的理解:

 git commit     将所有暂存区中的修改内容提交到当前分支版本库保存

git push 远程主机名  本地分支 :远程分支     将本地仓库中的某一个分支内容推送到一个远程分支下,如 git push origin test : dev,将本地的test分支内容推送到远程的dev分支下,test分支的内容作为dev分支下的内容。如果远程分支dev不存在,将会在远程创建一个名为dev的分支。一般本地分支名称和远程分支名称是相同的,所以这里一般可以不写远程分支名称,即直接写成:git push origin test ,会将test分支的更新内容自动推送到远程的test分支下,如果不存在,则在远程会创建一个名为 test的分支。如果本地和远程分支的名称不一样,则需要按照前面的写法进行分支名称的对应。git push时是将commit后的更改内容push到远程分支中,并不是所有。git push命令随时可以使用,不受是否存在未commit 或 未add的文件影响。

git pull 远程主机名   远程分支:本地分支     将远程的某一分支内容获取到后和本地指定的分支进行合并。如 git pull origin test:dev,获取远程的test分支和本地的dev分支进行合并,如果本地的指定的dev分支不存在,则默认会创建一个dev分支。

上面 “本地分支 :远程分支 ”这种就是在push或pull时建立了本地分支和远程分支之间的对应关系。也就是说我们要push或pull的时候,要搞清楚从哪里来,到哪里去。我们在初学时要建立本地远程库和库之间对应,分支和分支对应这样的概念。这样使用push 或 pull 之类的命令时就感觉很清晰。

以上只是个人初学git时的一些浅薄的理解,是对自己学习过程的一个记录。详细可参考以下大神的一些总结文章:

Git使用总结(包含Git Bash和Git GUI的使用)

Git Bash使用详细教程

关于git使用的几点理解的更多相关文章

  1. 【原创】关于Git暂存区的理解

    关于Git暂存区的理解      暂存区可以说是Git的三大重要的区域之一,另外两个分别是工作目录和Git仓库,所以说对暂存区的深入理解可以帮助我们理解很多Git命令背后隐藏的工作原理.今天,本文将以 ...

  2. 关于git提交的自己的理解

    包子不才,对于码云上的git的使用,自己的理解是 这个命令用于查看,哪些文件被修改了,以及修改了哪些地方, 这个命令用于增加你新添的文件,如果该文件已经存在,那么这一步则可以省略,随后就是commit ...

  3. git 4种对象的理解

    git中有四种基本对象类型,可以说Git的所有操作都是通过这四种对象完成的.下图是<Git版本控制管理>中文第二版的原话,顺便吐槽一下,这本书真的翻译的一般.. 下面说下我的理解吧,首先b ...

  4. 【Git 学习三】深入理解git reset 命令

    重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令.来看看git reset命令用法. --------------------------------------- ...

  5. 我对git的快速使用和理解

    收藏较好的,分享给大家 https://mp.weixin.qq.com/s/k4tU8snvssyKJ2WkvkFrZA

  6. git plumbing 更加底层命令解析-深入理解GIT

    原文: http://rypress.com/tutorials/git/plumbing 本文详细介绍GIT Plumbing--更加底层的git命令,你将会对git在内部是如何管理和呈现一个项目r ...

  7. 理解 Git

    Git 如何保存文件 其它版本管理系统通常会保存所有文件及其历次提交的差异(diff / revision),通过 merge 原始文件与各阶段的差异就能获取任何版本的状态 而 Git 保存的是每一次 ...

  8. 版本控制Git(1)——理解暂存区

    一.svn和Git的比较 我们都知道传统的源代码管理都是以服务器为中心的,每个开发者都直接连在中间服务器上, 本地修改,然后commit到svn服务器上.这种做法看似完美,但是有致命的缺陷. 1. 开 ...

  9. git的使用理解(分支合并的使用理解,多人编程的解决方案)

    本文主要记录了对git日常使用的一些理解,主要是对git分支的一些感悟. git强大的版本控制系统,之前也使用过SVN,感觉上git对于多人开发的版本控制更加强大,特别是最近对git分支的使用,更是深 ...

随机推荐

  1. SpringMVC学习笔记之---数据绑定

    SpringMVC数据绑定 一.基础配置 (1)pom.xml <dependencies> <dependency> <groupId>junit</gro ...

  2. macos Mojave 出现网络出错 Frame Check Sequence: Bad checksum

    问题描述:使用软电话外呼的时候出现Request Timeout . 端口监听之后通过 Wireshark发现错误:`Frame Check Sequence: Bad checksum`,查看wir ...

  3. Go中的日志及第三方日志包logrus

    有别的语言使用基础的同学工作中都会接触到日志的使用,Go中自然也有log相关的实现.Go log模块主要提供了3类接口,分别是 "Print .Panic .Fatal ",对每一 ...

  4. 素数筛法(Eratosthenes筛法)

    介绍 Eratosthenes筛法,又名埃氏筛法,对于求1~n区间内的素数,时间复杂度为n log n,对于10^6^ 以内的数比较合适,再超出此范围的就不建议用该方法了. 筛法的思想特别简单: 对于 ...

  5. 康托(Cantor)展开

    直接进入正题. 康托展开 Description 现在有"ABCDEFGHIJ”10个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? Input ...

  6. pycharm---文件名颜色所代表的含义

    绿色,已经加入版本控制暂未提交: 红色,未加入版本控制: 蓝色,加入版本控制,已提交,有改动: 白色,加入版本控制,已提交,无改动: 灰色:版本控制已忽略文件.

  7. 性能测试学习第六天-----JMeter拓展应用

    一.TCP取样器 服务器名称或IP:填写socket接口的ip 端口号:写socket接口的端口号 Re-use connection:是否重用链接,如果选择,同一个线程执行的所有请求都会使用一个tc ...

  8. 番茄日志发布1.0.3版本-增加Kafka支持

    番茄日志(TomatoLog)能做什么 可能你是第一次听说TomatoLog,没关系,我可以从头告诉你,通过了解番茄日志,希望能帮助有需要的朋友,番茄日志处理将大大降低你采集.分析.处理日志的过程. ...

  9. node.js 初学 自我笔记整理 day01

     node.js   概念问题: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.   npm是一个node的包管理工具  ,也是一个网站  ,还是一条命令.N ...

  10. Egret白鹭开发微信小游戏排行榜功能

    推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 我的个人博客 最近事情特别多,今天终于实现了排行榜功能,记录下来大家一起学习学习. 一.调用默认排行榜 首先我们需要了解: 1.白鹭开 ...