[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 *.c$
git 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
转载于:https://www.cnblogs.com/gyc567/p/5496868.html
[git]git的基本原理|git branch|git相关推荐
- Git详解(2)——Git基础
文章转载自:http://www.open-open.com/lib/view/open1328069733264.html 版权归原作者. 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的 ...
- GIT 学习笔记(2) —— GIT 基础
基本操作 git init : 初始化工作空间,产生.git目录,用于存放数据及资源. git add filename : 将file添加到被跟踪文件中(即版本控制中):修改后的文件发布新的版本也需 ...
- Git详解之二:Git基础
Git详解之二:Git基础 2012/08/24 | 分类: IT技术, 书籍与教程 | 0 条评论 | 来源: <PRO GIT> | 标签: GIT, PRO GIT, 版本控 ...
- git pull git add git commit git branch git更新代码git提交git分支管理
常用git命令整理 1. 拉取最新代码 2. 提交代码 3. 分支管理 3.1 查看所有分支(包括本地分支和远程分支) 3.2 查看远程所有分支 3.3 追踪远程分支 4. 强制用远程代码覆盖本地代码 ...
- 关于git中,两个branch自动同步的问题和解决
关于git中,两个branch自动同步的问题和解决 1问题描述 2问题原因 3解决方法 1问题描述 在git中,如果在一个branch中对代码进行了修改,切不做任何操作直接checkout另一个bra ...
- git push 出现 The current branch dev has no upstream branch.的问题
git push 出现 The current branch dev has no upstream branch.的问题 原因:本地分支没有和远程分支关联,导致无法push 解决方法:git pus ...
- git的一些简单命令(git clone,git branch,git checkout。。。)
1.git clone 命令 $ git clone <版本库的网址> 比如,克隆jQuery的版本库. $ git clone https://github.com/jquery/jqu ...
- git commit 错误:On branch main Changes not staged for commit:
当输入git commit 指令时,出现以下错误: 这里的错误提示:分支干管上,未暂存提交的更改:被改进的:README.md,未添加要提交的更改. 解决方法: 1.输入指令 git add . gi ...
- Git版本工具系列之一:Git常用命令
Git基本原理 在这个图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage, index)的. 图中左侧为工作区,右侧为版本库.在版本库中标记为 "index" ...
最新文章
- usaco Ordered Fractions 顺序的分数(两种解法)
- kvm-桥接模式(二)
- 节能信标无线感应定位测试:200kHz
- JSP/Servlet 工作原理
- PYTHON2.day03
- An Introduction to Hashing in the Era of Machine Learning
- 操作系统实验报告6:进程间通信—共享内存
- Qt5 程序启动画面图片效果
- linux模拟http请求命令
- MOE 分子动力学模拟操作
- 万网空间PHP 伪静态化,disuczx版块URL伪静态目录化设置方法
- 质点碰撞和卢瑟福公式
- 【视频】离职创业感悟
- 计算机老师三年发展规划,信息技术专业教师个人发展三年规划汇总(全).doc
- 基于vue 旅游网移动开发
- chef infra安装和使用入门
- 模拟电子技术实验指导书
- 2022年深圳中小学生学位补贴申报时间及对象
- mysql怎么查看网站后台帐号密码_mysql怎么查看网站后台帐号密码
- 国产芯片------瑞盟MS321/358/324低功耗通用型运放,替代LM321/358/324
热门文章
- OpenCV中Kinect的使用(3)
- linux init配置文件说明
- GDI+ 学习记录(31) 图像颜色变换(TGPImageAttributes)
- 我愿意参加Qcon 2010大会,你愿意吗?
- 精英赛上线|冠军万元奖金
- ​全网首发,TensorFlow 2.0 中文视频教程来啦
- 【python教程入门学习】两道关于递归的练习题
- 程序员们之间的“鄙视链”,程序员底之间无声的战争
- PyTorch | torch.tensor使用方法,如何使用torch.tensor
- 【项目实践】:KNN实现手写数字识别(附Python详细代码及注释)