让初学者快速了解Git
Git工作原理
为了更好的学习Git,我们们必须了解Git管理我们文件的3种状态,分别是已提交(committed)、已修改(modified)和已暂存(staged),由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。
Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。 这是Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。 这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”(Index),不过一般说法还是叫暂存区域。
基本的Git工作流程如下:
1、在工作目录中修改文件。
2、暂存文件,将文件的快照放入暂存区域。
3、提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。
1.1 Git安装
Window安装
http://git-scm.com/download/win下载Git客户端软件,和普通软件安装方式一样。
Linu安装
CentOS发行版:sudo yum install git
Ubuntu发行版:sudo apt-get install git
Mac安装
打开Terminal直接输入git命令,会自动提示,按提示引导安装即可。
1.2 Git本地仓库
1.2.1 Git基础
命令行方式:任意目录(建议开发目录)右键 > Git Bash Here
1、配置用户
git config --global user.name "自已的名字"
git config --global user.email "自已的邮箱地址"
--global 配置当前用户所有仓库
--system 配置当前计算机上所有用户的所有仓库
2、初始化仓库
git init
git init只是创建了一个名为.git的隐藏目录,这个目录就是存储我们历史版本的仓库,ls -al 可以查看。
3、查看文件状态
git status可以检测当前仓库文件的状态
4、添加文件到暂存区
git add file “*”或-A代表所有
放到暂存区的文件被标记成了绿色,等待提交。
5、提交文件
git commit -m '备注信息'
将暂存区被标记成绿色的文件,全部提交到仓库存储。
6、查看提交历史
git log
我们可以查看到一次提交记录,97b101e7d代表这次提交的唯一ID,一般称为SHA值。傻?
这时我们对index.html文件做修改
7、再次检测仓库文件状态
git status
被修改过的文件被标记成了红色,等待重新添加到暂存区。
8、重新添加暂存区然后提交
git add index.html
git commit -m 'add some words'
9、再次查看历史
git log 可查到所有提交历史
这时可以查看到两次提交历史。
这时关掉所有目录甚至关机!
10、恢复上一次提交的状态
git reset --hard 97b101e7d 查看index.html发现回到了没有修改的状态
git log再次查看发现提交历史只有一个了
这时我们非常容易就回到了曾经的一个历史版本。
仓库示意图
1.1.1 Git分支
在我们的现实开发中,需求往往是五花八门的,同时开发个需求的情况十分常见,比如当你正在专注开发一个功能时,突然有一个紧急的BUG需要你来修复,这个时候我们当然是希望在能够保存当前任务进度,再去修改这个BUG,等这个BUG修复完成后再继续我们的任务。如何实现呢?
通过创建分支来解决实际开发中类似的问题。
当我们在初始化仓库的时候,Git会默认帮我们创建了一个master的分支,并且HEAD默认指向了master末端。
我们也可以创建自已的分支
1、创建分支
git branch hotfix
2、切换分支
git checkout hotfix
我们发现HEAD现在又指向了developer的末端。
3、再次提交操作
git add -A
git commit -m 'add some code for hotfix'
这次的提交历史版本就会记录在developer这个分支上了,并且HEAD伴随developer在移动。
4、当我们再次切回到master时
git checkout master
当我们切换回master后,HEAD指向了master分支的末端。
5、继续之前的开发
git add -A
git commit -m 'add some code for master'
总结:当我们git checkout branchname时,HEAD会自动指向对应分支的末端,工作目录中的源码也会 随之发生改变。
这个时候我们就在hotfix这个分支上修复了这个BUG,而我们原来在master分支上的操作并未受到影响。
思考一个问题:
现在master这个分支上是否包含了hotfix的修复呢?
实际上从图4-5可以看出这时的master分支并没有包含有hotfix的修复。
6、合并(融合)分支
git checkout master
git merge hotfix
这时master会有两个父结点了,master便包含了hotfix里的修复了
7、删除分支
git branch -d hotfix
这时用来修复BUG创建的hotfix分支已经没有用处了,我们可以将它删除。
1.1 Git远程仓库
通过上面学习我们可以很好的管理本地版本控制了,可是如果我们下班回到家里突然来了灵感觉得有部分代码可以优化,如果能接着公司电脑上的代码继续写该有多好呀!另一种情形,假设项目比较大,不同的功能模块由不同的开发人员完成,不同模块儿之间又难免会依赖关系,这时如果我们的代码互相合并(融合)该有多好呀!所有模块开发完毕后,需要整合到一起,要能做到准确无误该有多好呀!
借助一个远程仓库,大家可以共享代码、历史版本等数据,便可以解决以上遇到的所有问题,在学习远程仓库前我们先来学习git clone path这个命令。
1、获取已有仓库的副本
在blog这个目录同级执行
git clone ./blog 目录名称
2、进入到demo目录中
cd demo
git log可以看到全部的提交历史
这时我们可以认为这个这个blog其实就是一个“共享的”仓库了,但是要想创建一个真正的共享仓库,需要做一些特殊的处理。
3、创建共享仓库
Git要求共享仓库是一个以.git结尾的目录。
mkdir repo.git 创建以.git结尾目录
cd repo.git 进入这个目录
git init --bare 初始化一个共享仓库,注意选项--bare
这样我们就建好了一个共享的仓库,但这时这个仓库是一个空的仓库。
4、向共享仓库共享内容
进入到本地的仓库 copy
cd copy
git push ../repo.git master
5、从共享仓库里取出内容
git clone ./repo.git demo
通过repo.git共享仓库,我们轻松得到了一个copy的副本
6、通过demo仓库向repo.git共享内容
进入到demo里,我们做一些修改
cd demo
git push ../repo.git master
7、在copy仓库从repo.git获取共享的内容
cd copy
git pull ../repo.git master
奇迹似乎发生了,我们轻松的将demo仓库里的内容,通过repo.git共享给了copy仓库。
惊喜不断,问题也总是不断,我们发现我们这个共享的仓库只是放到了本地的,其它人是没有办法从我们这个共享仓库共享内容的!!!
然而现实是,办法总是有的!!!!
我们把这个共享的仓库放到一台远程服务器上,问题不就解决了吗?
让初学者快速了解Git的更多相关文章
- 使用SSH快速下载Git项目
文章首发于[博客园-陈树义],点击跳转到原文使用SSH快速下载Git项目. Git下载项目的几种方式 Git是常用的代码版本技术,而GitLab则是开源的Git版本管理软件,GitLab是最受欢迎的版 ...
- Git 快速入门--Git 基础
Git 快速入门 Git 基础 那么,简单地说,Git 究竟是怎样的一个系统呢? 请注意接下来的内容非常重要,若你理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余. 在开始学习 G ...
- 如何快速学会git
相信大多数入门者都对git的原理比较恍惚,今天我们来告诉大家如何快速学会git命令. 1.git init 这个命令会在当前目录里创建一个.git目录,也就是初始化本地仓库.git. 如图先创建文件夹 ...
- 【Git】2、Linux快速安装Git环境 & oh-my-zsh
Linux快速安装Git环境 文章目录 Linux快速安装Git环境 1.Linux安装Git 2.安装zsh 3.安装oh-my-zsh 3.1.安装oh-my-zsh 3.2. 测试验证 4.小结 ...
- 快速上手git gitlab协同合作
简单记录,整理. 摘要 为方便大家快速上手Git,并使用Gitlab协同合作,特编写此手册,手册内容不会太丰富与深入.主要包含如下内容: Git 使用教程1.1 安装1.2 常用命令1.3 版本控制1 ...
- Windows环境下利用github快速配置git环境
在windows环境下利用github客户端我们可以直接拥有可视化的界面来管理工程,当然你也可以选择你喜欢的命令行工具来做.今天我分享一个比较快速的方式来配置git环境. 先去下载github的win ...
- Android开发的初学者快速创建一个项目
因为gwf的原因,大陆连不上google所以AndroidSDK是无法更新的 而且设置代理也不一定能解决问题 如果是初学者想快速的了解安卓开发,可以在国内的内网下载整合包 下载地址:http://rj ...
- 快速为git添加一个用户
环境:用gitosis-admin管理git的权限. 前期git环境的搭建略去,主要给出快速添加一个用户的步骤: 在git bash中用“ssh-keygen -t rsa”生成公钥私钥,默认放到 “ ...
- 配置一个高效快速的Git环境
username and email editor difftool and mergetool alias 可以直接修改~/.gitconfig文件,也可以用命令配置一个可以实际使用的高效的Git环 ...
随机推荐
- 面向对象的SOLID原则白话篇
面向对象的SOLID原则 简介 缩写 全称 中文 S The Single Responsibility Principle 单一责任原则 O The Open Closed Principle 开放 ...
- 安装ecshop的问题处理
在安装Ecshop的时候,会遇到几个问题: 1.Strict Standards: Non-static method cls_image::gd_version() should not be ca ...
- Hybrid App开发之jQuery操作DOM
前言: 前面学习了JQuery的选择器,今天开始学习新的知识,JQuery操作DOM元素. 元素属性的访问与设置 attr(name) 获取元素属性 attr(name,value) 单个属性设置 a ...
- ORA-12638: 身份证明检索失败 解决方法
用PL/SQL或Navicat连接本地或远程Oracle数据库的时候报错:ORA-12638: 身份证明检索失败 解决方法: 开始 -> 所有程序 -> Oracle - Oracle_h ...
- Docker Daemon 参数最佳实践
1. Docker Daemon 配置参数 限制容器之间网络通信 在同一台主机上若不限制容器之间通信,容器之间就会暴露些隐私的信息,所以推荐关闭 docker daemon –icc=false 使用 ...
- H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持
H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持 1,H.264格式 网络表示层NAL,如图H.264流由一帧一帧的NALU组成: SPS:序列参数集,作用于一系列连续的编码 ...
- Python操作redis系列之 列表(list) (四)
# -*- coding: utf- -*- import redis r =redis.Redis(host=,password="ZBHRwlb1608") 1. Lpush ...
- 经验之谈——gulp使用教程
gulp的最实用教程 使用gulp编译less.sass.压缩js等常用功能讲解 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多 ...
- 简单总结一下 XSS
你听说过XSS吗? XSS(Cross-site scripting, 跨站脚本)是一种网站应用程序的安全漏洞攻击,是代码注入的一种. 研究表明,最近几年 XSS 已经超过 "缓冲区溢出&q ...
- Button动态样式取代xml
还在为 textview以及button 的各种样式而烦恼的童鞋们请往这里看~~~~ 一次性解决 textview以及button的样式,再也不用写xml了!!! 全部动态预设置,拒绝堆代码,拒绝xm ...