git与github——1,简介、安装及设置账号、创建版本库及提交文件、常用命令汇总、git的时光穿梭机
目录
一、git是什么?
1,git与github
2,分布式与集中式
二、安装、设置账号、设置ssh
1、安装、设置账号
2,设置ssh
三、创建版本库及提交文件
1,创建版本库
2,添加文件到版本库
四,常用命令汇总
五、git的时光穿梭机
1,版本回退
2,工作区和暂存区
3,管理修改
4,撤销修改
5,删除文件
博主之前有些svn的学习笔记,与svn相对,git是一个更为流行的版本管理工具。
一、git是什么?
1,git与github
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Linus在1991年创建了开源的Linux,然后全世界有n多人提交代码给Linus,Linus是如何管理这些代码?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!那么他为什么不用cvs、svn之类的版本管理工具?因为速度慢,而且要联网才能使用!
之后Linus采用了一段时间商业的版本控制系统BitKeeper,但是搞Linux的毕竟牛人众多,有许多黑客尝试破解这个版本管理工具,BitMover知道后,怒了!然后收回了Linux免费使用BitKeeper的权利。
但是黑客怎么会受制于人!Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!所以,对于黑客(想成为高级工程师的人)不是自己去适应机器,而是让机器适应你!没有软件,自己弄一个。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。至于github吗,全球最大的搞G网站:
2,分布式与集中式
分布式与集中式的区别在于其管理方式,集中式:
分布式:
看出了区别吗,分布式每一个节点都可以做仓库,而集中式则只有服务器可以做仓库!确定和优点是不是显而易见?
包括微软、IBM他们也有开发版本管理工具,但是呢,效率低而且不好用!所以开源软件真是又好用又不用花费,开源才是提升技术的最好途径!
二、安装、设置账号、设置ssh
1、安装、设置账号
windows安装git,从官网下载git程序,安装好之后就有git bash
进入git bash后修改用户及email:
$ git config --global user.name "Your Name"
$ git config --global user.email email@example.com
因为git是分布式版本控制系统,所以每台机器需要自保家门。注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以针对某个仓库设置username和email。
2,设置ssh
打开git bash,在控制台中输入以下命令:
ssh-keygen -t rsa -C "邮箱"
密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。
同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行。
输入完毕后程序同时要求输入一个密语字符串(passphrase),空表示没有密语。接着会让输入2次口令(password),空表示没有口令。3次回车即可完成当前步骤,此时[c盘>用户>自己的用户名>.ssh]
目录下已经生成好了。
根据生成的地址,直接在git bash中cat查看
登录github。打开setting->SSH keys,点击右上角 New SSH key,把生成好的公钥id_rsa.pub
放进 key输入框中,再为当前的key起一个title来区分每个key。
3,出现一个Enter passphrase for key '/e/Gitspace/.ssh/id_rsa': 提示
出现这个提示时,直接输入密码之后就可以连接到自己的仓库。
三、创建版本库及提交文件
1,创建版本库
什么是版本库?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建一个test1仓库:
显示创建一个test1的目录,然后init成一个仓库。在这个目录下有一个.git目录:
这个.git目录是用来跟踪版本的,没事别动它。
2,添加文件到版本库
当把文件添加到版本库时,有几个注意事项:
(1)Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。另外纯文本建议采用utf-8,既没有冲突,又被所有平台所支持。(嘿嘿,博主有篇博客也记了下各种编码格式间的区别,可以看看什么utf-8、utf-16之类的区别,最好用的就是utf-8咯);
(2)Windows下编辑文本特别注意一点:千万不要使用Windows自带的记事本编辑任何文本文件!原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题。所以嘛,可以用notepad、ue、sublime之类的编辑器。
我们编写一个readme.txt文件:
在sublime中打开并输入:
Git is a version control system.
Git is free software.
设置以utf-8方式打开。
把一个文件放入git仓库分两步:
(1)git add read
$ git add readme.txt
没有任何显示!这就是添加成功的意思
(2)git commit
git commit -m "a readme file"
-m 后面跟的就是提交说明的咯。
四,常用命令汇总
会添加文件了之后,我们先来大概看一下可以使用的命令如下,有个概念即可:
五、git的时光穿梭机
修改readme文件:
Git is a distributed version control system.
Git is free software.
输入:git status
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt
被修改过了,但还没有准备提交的修改。
想看一下具体修改了哪些地方:
git diff readme.txt
按照学习linux的方式,博主还是很喜欢一行一行的看
diff --git a/readme.txt b/readme.txt
第一部分表示使用的git格式的diff
index d8036c1..013b5bc 100644
第二部分表示两个版本的git哈希值(index区域的d8036c1对象,与工作目录区域的013b5bc对象进行比较),最后的六位数字是对象的模式(普通文件,644权限)。
--- a/readme.txt
+++ b/readme.txt
第三部分表示进行比较的两个文件,"---"表示变动前的版本,"+++"表示变动后的版本。
@@ -1,2 +1,2 @@
前面的"-1,2"分成三个部分:减号表示第一个文件(即index区域的d29ab50对象),"1"表示第1行,"2"表示连续2行。合在一起,就表示下面是第一个文件从第1行开始的连续3行。同样的,"1,2"表示变动后,成为第二个文件从第1行开始的连续2行。(我理解的-指变动前,+指变动后)
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
\ No newline at end of file
最后一部分是具体的差异部分
知道做出了什么修改之后,就可以放心地git add了。
执行完git add之后再执行git status:
git status
告诉我们,将要被提交的修改包括readme.txt
然后提交:
git commit -m 'my test'
再调用git status:
Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。
1,版本回退
再来修改一次readme:
Git is a distributed version control system.
Git is free software distributed under the GPL.
add、commit。
至此为止我们修改了两次,有三个版本的readme。我们要如何查看这些记录呢?
git log 查看git历史记录:
git log
命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是wrote a readme file
。但是这些信息是不是太多了,才一个文件的修改就这么多记录。
我们可以采用--pretty=oneline
参数来减少输出信息
信息就简介了很多,但是也能看到各个历史操作。也可以改成:git log --pretty=oneline readme.txt查看单个文件。
注意一下这一串东西:be459e9f3da1583d15c2c0f85effa8fa768114c1和svn提交不太一样,svn的commit id是1、2、3之类的,git的commit id 是一个SHA1计算出来的一个非常大的数字,用十六进制表示。为啥git的commit id如此复杂?因为git是一个分布式版本管理工具,如果采用1、2、3作为commit id,那肯定很容易发生冲突。
好了,现在我想把版本回退到 my test,要怎么做?使用git reset 命令!
git reset --hard HEAD^
这样就会退了一个版本:
这下麻烦了,要怎么回到 append GL?
$ git reset --hard be459
HEAD is now at be459e9 append GL
这样又可以了!版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
:
回到刚刚回退到GL的代码,如果我不知道commit id,肿么办!我要怎么回到最初:
Git提供了一个命令git reflog
用来记录你的每一次命令:
be459e9 (HEAD -> master) HEAD@{2}: commit: append GL
所以找到了append GL的commit id为:be459e9
2,工作区和暂存区
工作区就是你在电脑里能看到的目录;工作区里有一个.git,这个不算工作区,而是git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
前面把文件加入到git仓库的两步,第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。可以理解成,先把需要提交的内容放在暂存区,然后通过commit提交所有内容。Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
再来加深一下对缓存区的认识。
修改readme:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
新建一个文件LICENSE
调用git status :
Git非常清楚地告诉我们,readme.txt
被修改了,而LICENSE
还从来没有被添加过,所以它的状态是Untracked
。
使用两次命令git add
,把readme.txt
和LICENSE
都添加后,用git status
再查看一下:
3,管理修改
为什么git比其他版本管理工具更优秀?
因为Git跟踪并管理的是修改,而非文件。为什么说git跟踪的事修改?接下来我们来做个试验证明。首先将三行的readme增加一行:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
然后添加:
然后,再修改readme
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git has a mutable index called stage.
Git tracks changes of files.
此时先提交再git status查看git 状态:
第二次的修改并没有提交!因为这个提交的工作是这样的:Git管理的是修改,当你用git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
提交之后,我们用git diff HEAD -- readme.txt 查看工作区和版本库里面最新版本
可见,第二次修改是没有提交的,还是4行!
4,撤销修改
承上例,git checkout -- file
可以丢弃工作区的修改
5 line的修改是没有上传到缓存区此时我使用$ git checkout -- readme.txt
则有如下效果:
它回到了4行!它回到的是暂存区的状态还是提交到版本库的状态?
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
在这个示例中,它是回到了暂存区的状态。
实际上这个checkout回到的是最近的add或commit状态。
如果我add了之后,想回到没有add之前呢?目前readme有四行数据:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
加一行,然后add:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git has a mutable index called stage.
Git tracks changes of files.
此时要采用git reset HEAD <file> 命令,可以把暂存区的修改撤销掉(unstage),重新放回工作区:
git reset HEAD readme.txt
为什么文件里还是由5行?!
因为这一步是清理了缓存区,接下来,还是要通过checkout修改
先git status看下状态
如果是add的话,这里是绿色的,说明取消了add。
$ git checkout -- readme.txt
这样就可以了!
5,删除文件
首先添加一个 test.txt:
之后我们删除掉这个文件:
rm test.txt
工作区确实没有了
查看git 状态:
缓存区没有相应修改,因此需要用命令git rm
删掉,并且git commit
查看一下git 状态:
标绿说明,缓存区已进行了修改。
如果是误删,但是缓存区里还有,可以通过git --checkout test.txt 进行恢复。
参考:廖雪峰的博客https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000
git与github——1,简介、安装及设置账号、创建版本库及提交文件、常用命令汇总、git的时光穿梭机相关推荐
- Git学习笔记一--创建版本库、添加文件、提交文件等
Git,是Linus花了两周时间用C写的一个分布式版本控制系统.牛该怎么定义? 其实,很多人都不care谁写了Git,只在乎它是免费而且好用的!So do I! 下面开始我们的学习: 1.Git安装( ...
- Git创建版本库和添加文件
创建版本库: 首先新建一个目录,然后通过 $ git init命令把这个目录变成Git可管理的仓库,例如: 在"C:\AmyPersonal\AmyGit"路径下新建文件夹Git1 ...
- 【GIT 基础篇二】创建版本库与提交
最近在项目过程中,着实是犯懒了,虽然公司使用git管理,但是感觉自己已经严重的依赖页面工具了,这次正好借助公司不是很忙,把git常用的命令整理记录一下,今天我们主要就是整理创建仓库以及修改提交功能. ...
- Git回滚文件常用命令汇总
1. 修改完,还未执行git add 缓存区没有任何文件时,使用 git checkout . 将暂存区的文件覆盖工作区 执行完 git add . 之后,再执行该命令是无效的,git checkou ...
- Git常用命令与Git for windows solarized主题配置
近来学习了git的相关应用,由于不是很上心,拖拖拉拉地学了将近半个月的时间,在差不多学成后,回头来总结一下这段时间的学习. git安装 创建版本库 工作区与暂存区 远程仓库 分支管理 常用命令 其他 ...
- 本地Git下载安装以及创建版本库、远程Github
Git下载安装 windows:在git官网下载安装程序即可.点击git bash,出现命令行窗口说明安装成功. CentOS 7:root权限下,输入yum install git.如果非root权 ...
- Git学习笔记 -- 安装git、创建版本库、时光穿梭、远程仓库
一.Git的安装 在window系统上安装:从https://git-for-windows.github.io下载,然后按默认选项安装即可: 安装完成后,在"桌面"上右击,在弹出 ...
- Git 的安装和创建版本库 。
Git 的优点就不再多说了 .直接进入正题吧 . 安装Git 首先可以尝试输入 Git 看看有没有反映 . $ git The program 'git' is currently not insta ...
- Git的基本使用(用户初始化配置、新建代码库、把文件提交到缓存区、把文件提交到本地仓库等)
[基本概念] Git: Git是负责对工作区的文件进行版本控制,因为Git装在本地,那么在本地(当前计算机下)就必须要有一个仓库,这个仓库中记录了所有的版本变化. Github: 公网上典型的远程仓库 ...
最新文章
- ubuntu18 搜狗输入法 解决版
- FBI再度要求苹果协助为波士顿黑帮成员的iPhone解锁
- 安卓桌面软件哪个好_安卓模拟器哪个比较好?
- C# 强大的新特性 Source Generator
- easy html css tree 简单的HTML css导航树
- QObject::connect: No such signal QGraphicsView::mouseMovePoint(QPoint) in ***
- 基于Redis的分布式锁的简单实现
- 文件夹缩写(文件夹空格问题解决)
- (二)文档请求不同源之window.postMessage跨域
- php牛牛发牌算法,分享一个牛牛算法
- 【PMP】七、项目成本管理
- 文件上传和OSS上传至阿里云
- word文档中表格顶头怎么调整_教你用Word制作专用信纸,轻松几步就完成
- 广州互联网公司面试地图
- iphone屏幕上的圆圈怎么设置_苹果手机上的小圆圈在哪设置【方法介绍】
- LiveRTMP推送RTSP视频源进行RTMP直播
- 800行Python代码实现双十一自动登录抢购商品,这速度女友很爱
- 什么是MVC设计模式?
- ASW3410设计说明|双通道 2切1/1切2 USB3.1 多路切换器设计|USB3.1/2.0双向切换方案
- 详解BUG(又名:BUG的生命周期)