[git]git的基本原理|git branch|git
继续写一篇git的文章,介绍下git的历史和基本原理。
介绍下git的历史,据砖家考究,遥想当年,linux的创始人,牛人李纳斯,开发linux用的版本控制工具BitKeeper,出于公益或友好, 是免费的,但是李纳斯手下的几个黑客试图破解BitKeeper的协议,结果被BitKeeper公司发现,就从免费转向收费。
牛人李纳斯一努之下,两周就用C撸了一个新的版本控制系统,这就是Git.
彪悍的牛人,就是这么嚣张!
下面说下它的基本原理:(以下所有内容都可以从它官网得到:https://git-scm.com/doc)
其实git本身是一个文件系统,是一个分布式文件系统,而文件系统中最常见的数据结构也就是一个树,一个多叉树。
Git 以一种类似 UNIX 文件系统但更简单的方式来存储内容。所有内容以 tree 或 blob 对象存储,其中 tree 对象对应于 UNIX 中的目录,blob 对象则大致对应于 inodes 或文件内容。一个单独的 tree 对象包含一条或多条 tree 记录,每一条记录含有一个指向 blob 或子 tree 对象的 SHA-1 指针,并附有该对象的权限模式 (mode)、类型和文件名信息。
这是git的文件对象图:
那么怎么创建origin?
直接在一个空目录用命令:
git init
就自动创建了一个Git仓库.git创建一个仓库后,我们以这个仓库为个中心版本库。在你创建仓库的时候,master 是"默认的"分支。
这个时候,git在本地创建了几个重要的目录区:
workspace---->git index--->git repository
如果这时你相把你现在创建的本地仓库与一个运程的git仓库相连,用什么命令呢?
用这样的命令:
git remote add pb https://github.com/paulboone/ticgit
其中,pb,是这个远程仓库的别名。
现在你可以在命令行中使用字符串pb来代替整个 URL。
例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行git fetch pb:
git fetch pb
用这个命令,git就会从远程git仓库:
https://github.com/paulboone/ticgit
下载最新的代码。git fetch [remote-name]会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
如果,你想从远程git仓库直接下载并合并到你的workspace用什么命令呢?
$ git pull <远程主机名> <远程分支名>:<本地分支名>
这里,可以用这样的命令:
git pull pb master:master
如果,你想从远程git仓库里直接下载或复制一个git仓库,而不是在本地用git init命令创建,可以用类似命令:
git clone https://github.com/schacon/ticgit
这样,本地仓库与远程仓库的关系如下图:

那怎么查看当前目录是否与远程仓库相连呢?
用命令:
git remote -v
如果有另外一个用户B在他的电脑,也clone了相同的git仓库,这时候(我们假设只有两个用户A,B从服务器URL:
https://github.com/schacon/ticgit
clone或add到local repository)
这时候,这几个git仓库应该是这样的:
我们跟远程的git仓库建立关联关系后,我们在本地电脑修改,修改后怎么提交到远程git仓库呢?
如果在本地创建了几个C文件,和license文件,用下面三个命令:
$git add *.cgit add LICENSE
$$git commit -m'initial project version'
然后,push到的远程git仓库: git push origin master
现在我们在本地创建了一个git仓库origin,
我们现在想得到这样的多个分支,如下 :
那怎么从origin中创建另一个分支bob呢:
用命令:
#切换到master分支
git checkout master
#创建bob分支
git branch bob
用同样的方式创建另一个clair分支
git branch clair
这时候,三个仓库是相同的版本树形式分别保存在不同的电脑或服务器里的,如下图: 所以,这里三个仓库已经是保存了完整的版本信息。
那么,在本地更新了文件后怎么提交到master服务器里呢?
用命令:
#切换到bob分支
git check bob
#提交到bob分支
git commit -a -m "your comments" #切换到master,也是origin
git checkout master
#把bob分支合并到master
git merge bob
[git]git的基本原理|git branch|git的更多相关文章
- Git详解之二:Git基础
Git 基础 读完本章你就能上手使用 Git 了(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读).本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到 ...
- 【git】15分钟学会使用Git和远程代码库
Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- git远程删除分支但本地git branch -a仍能看到解决
git远程删除分支但本地git branch -a仍能看到解决 在gitlab页面删除分支 但是本地能可以看到 $ git branch -a br_dev br_to_delete * master ...
- Git介绍和基本原理
官方文档:http://git-scm.com/doc 1.1 起步 - 关于版本控制 本章关于开始学习 Git. 我们从介绍有关版本控制工具的一些背景知识开始,然后讲解如何在你的系统运行 Git,最 ...
- Git checkout on a remote branch does not work
I believe this occurs when you are trying to checkout a remote branch that your local git repo is no ...
- 理解git 中的HEAD指针&branch指针
理解git 中的HEAD指针&branch指针 Yooye关注 2019.02.28 10:44:32字数 492阅读 668 HEAD指针 使用git checkout 来移动HEAD指针, ...
- git branch & git remote branch
git branch & git remote branch $ git branch -h usage: git branch [<options>] [-r | -a] [-- ...
- git reflog 和git log :no branch git 提交方式
git reflog 和git log的区别,外加git cherry-pick的一种用法 git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被 ...
- Git、Github习笔记01——Git本地仓库
作者:Eventi 出处:http://www.cnblogs.com/Eventi 欢迎转载,也请保留这段声明.谢谢! git简介 版本控制软件,由Linus(linux开发者)开发,最初用来对li ...
随机推荐
- 在WCF程序中动态修改app.config配置文件
今天在个WCF程序中加入了修改配置文件的功能.我是直接通过IO操作修改的app.config文件内容,修改后发现发现其并不生效,用Google搜了一下,在园子里的文章动态修改App.Config 和w ...
- Linux_RHEV虚拟化_基础理论&KVM
目录 目录 RHEV KVM Full 完全虚拟化 PV半虚拟化 Full和PV最大的区别 HVMHardware Virtual Manager硬件辅助虚拟化 Setup KVM Use the v ...
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_1 今日课程内容介绍
- node.js ffmpeg-concat 命令行形式处理多个视频的过度效果
ffmpeg-concat 是利用 gl-transitions 处理多个视频的过度效果.详细说明参见 https://github.com/transitive-bullshit/ffmpeg-co ...
- 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符
第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...
- ES6标准入门 第三章:变量的解构赋值
解构赋值:从数组和对象中提取值,对变量进行赋值. 本质上,这种写法属于“匹配模式”:只要等号两边的模式相同,左边的变量就会被赋予对应的值. 1.数组的结解构赋值 基本用法 let [foo, [[ba ...
- JSP———数据交互【2】
内置对象application 实现用户之间的数据共享 与session 对象不同的是,所有客户的 application 对象是相同的一个,即所有的客户共享这个内置的 application 对象 ...
- 【MM系列】 MM60增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列] MM60增强 前言部分 大家可 ...
- 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
ubuntu更新软件时 apt-get upgrade 遇到 E: 无法获得锁 /: 资源暂时不可用) E: Unable to acquire the dpkg frontend lock (/va ...
- Mac020--常用插件
Google浏览器常用插件 1.github插件octotree 2.掘金Chrome网上应用商店 2-1.掘金/老司机的神兵利器 2-2.好用的Google插件:来自掘金 3.Gliffy Diag ...