ubuntu16.04系统下git学习笔记

前言

此博文是我在第一次学习git结束之后,重新阅读教程整理的学习笔记,主要目的是加深印象,此外记录一些我自己操作过程中出现的一些问题。

一.推荐廖雪峰老师的博客教程

我的所有学习过程都是依照廖雪峰老师的博客进行,这一篇学习笔记也基本按照廖老师的博客整理,所以推荐想学习git的朋友直接进入廖老师的博客页面进行学习,没有必要在我的博客下面浪费时间。此外我发现廖雪峰老师的博客还整理有很多其他编程语言的学习资料,例如python,java,内容免费且十分优质,推荐阅读。廖雪峰老师博客地址如下:

https://www.liaoxuefeng.com/

二.git学习笔记

1.git简介

1.1.git的诞生

1991年Liunx创建开源的Linux系统。之后全世界热心的志愿者参与系统的构建,为Linux编写代码发送给Linux本人,Linux本人通过手工的方式管理代码。

2002年Linux代码库过大,已经无法通过手工管理,Linux选择了商业的版本控制系统BitKeeper,该软件的开发商出于人道主义精神,授权Linux社区免费使用该控制系统。

2005年Linux社区某些大佬尝试破解BitKeeper的协议,被开发商BitMover发现,BitMover决定收回Linux社区的免费使用权。之后Liunx本人花费了两周时间用C语言编写了一个分布式版本控制系统,就是Git。

Git迅速成为最流行的分布式版本控制系统,2008年GitHub网站上线,为开源项目提供免费的Git储存服务,无数开源项目迁移到GitHub。

1.2.集中式和分布式

集中式版本控制系统如CVS和SVN,他们是以一台服务器作为中心,所有的版本信息都都保存在中央服务器,每次要修改代码都得先从中央服务器取得最新版本代码,然后再修改,修改完成之后再推送给中央服务器。

集中式版本控制系统可能存在的问题是速度慢,每一次都需要提交完整的内容到中央服务器。此外还有安全问题,如果中央服务器出现损坏,储存的版本信息可能会全部丢失。

集中式版本控制系统(图片来源于廖雪峰老师博客)

分布式版本控制系统如git,在每一台电脑上都有自己的仓库用来储存版本信息,同时可以建立一个中央服务器储存版本信息,每次在自己的电脑上完成代码修改,直接推送修改内容到中央服务器或者推送到其他电脑。

分布式版本服务器的优势在于安全性高,每个人的电脑都有完整的版本信息,只是不断往中央服务器推送修改,所以服务器或者其中几台电脑出现问题并不会带来内容全部丢失的巨大损失。此外由于每次推送都是推送修改内容,速度上相较于集中式版本控制系统要快。

分布式版本控制系统(图片来源于廖雪峰老师博客)

2.安装git以及创建版本库

2.1.安装git

在ubuntu系统中,直接在终端输入git指令可以查看是否安装git,如果没有就可以直接使用:

sudo apt-get install git

进行安装。

2.2.创建版本库

ubutntu下创建版本库首先需要创建一个空目录,然后在目录内打开终端使用

git init

指令就可以创建仓库。git init指令的作用其实是是初始化仓库。

3.git本地仓库指令功能记录

3.1git add指令和git commit指令

git add <filename>

这个指令的作用是添加工作区修改内容到暂存区。<filename>是指你提交的文件名,每次只能提交一个文件。

git commit -m "describe" 

这个指令的作用是把在暂存区的所有内容,包括文件的增减,文件的修改,等内容提交到仓库。"describe"部分是对本次提交的描述,比如我提交了三个文件就是 git commit -m "add 3 file"。每次使用这个指令就相当于生成了一个版本,所以相应的会生成一个版本编码,用来标记相应版本。

工作区是记录你在仓库内对文件及文件内容所进行的所有修改的区域,暂存区是暂时存放修改内容的区域,提交到暂存区不会生成版本信息。版本库是储存版本信息,每一个版本都记录在案,可以随时回到某一个版本。

3.2git status指令

git status

这个指令是用来查看仓库当前状态,主要输出信息包括未提交到暂存区的修改,工作缓存区存在但未提交到版本库的修改,以及当前版本对比远程仓库的进度。

3.3git reset 指令

git作为版本管理系统,意义就在于可以记录每一个版本的内容,并且你可以随时回到任意一个版本。其实git内部有一个HEAD指针,指向当前版本,你要退回到之前或之后的版本只需要改变指针指向的位置。

来源于张雪峰老师博客

如图就是指向了最新版本,可以使用如下指令改变:

git reset --hard HEAD^

 其中HEAD^表示上一版本,如果上面两个版本就是HEAD^^,上100个版本则是HEAD~100。此外,用版本编码的前几位代替HEAD部分则可以直接回到对用版本。

3.4git log指令git reflog指令

git log

git log 指令用于查看当前版本到最远的版本信息。就是说如果你目前的位置不是最新版本,那么你使用git log指令就无法看到最新版本的版本信息,因为它在当前版本之后。

git reflog

git reflog指令用于查看所有版本信息,无论你位于哪个版本,都会输出全部的版本信息。

用一个例子来说明两个指令的区别,比如你开发了十个版本,你目前位于第三个版本,那么使用git log只会输出前三代版本信息,git reflog则会输出全部十个版本信息。

这里说的版本信息是指修改时的标注以及版本对应编码。

3.5git checkout -- <filename>指令

git checkout -- <filename>

该指令用于丢弃工作区的修改内容,当需要连暂存区内容一起丢弃时应该先回到上一版本然后丢弃工作区修改内容。

实质上git checkout是使用版本库内容替代工作区内容。

3.6 git rm指令

git rm <filename>

工作区会记录对文件及文件内容的所有操作,其中包括删除了某个文件,这时候有两个选择,一个是使用git rm指令删除仓库对该文件的记录并且git commit提交,另外一个是使用git checkout -- <filename>回到最新版本,即撤销删除文件的操作。

4.远程仓库的添加以及内容推送抓取

4.1远程仓库的选择

对于个人用户而言,使用github上的免费开源仓库是很好的选择,如果代码不打算开源,就可以付费使用github的私人仓库,或者自己用服务器搭建远程仓库。

4.2用GitHub建立远程仓库

首先需要申请github的账号,github网站网址:

https://github.com/

申请账号之后建立仓库。

4.3创建SSH密钥

SSH是Secure Shell的缩写,由IETF的网络小组所制定,SSH为建立在应用层基础上的安全协议。SSH是目前较为可靠,专为远程登录会话和其他网络服务提供安全性的协议。

创建密钥需要先安装SSH,代码如下:

sudo apt-get install openssh-server

然后查看并启动SSH:

sudo ps -e | grep ssh

然后就可以创建密钥了,代码如下:

ssh-keygen -t rsa -C "youremail@example.com"

其中邮箱地址那一部分其实相当于SSH密钥的用户名,改成任意字符都可以。然后创建过程中会出现几次需要填写的项,建议跳过第一次,也就是命名那一次。后面两次是创建一个密码,如果带有密码的话每天首次推送会需要密码验证。

创建好了之后把后缀为.pub的文件内的内容复制,这是公钥,可以告诉别人,然后通过这个公钥和自己连接。复制之后打开github主页,点击右上角头像选择settings进入设置。然后选择SSH and GPG keys,点击创建SSH密钥,title可以随意填写,key把刚刚复制的内容填进去。

 4.4关联本地仓库和远程仓库

在本地仓库目录下打开终端,输入:

git remote add origin git@github.com:<github用户名>/<github仓库名.git>

然后其中的 origin是远程库的名字,可以自定义。

之后使用如下代码验证是否连接到远程库

ssh -T git@github.com

正常连接会显示远程库的信息。如果出现失败的提示语句,可以删除SSH密钥重新创建再连接。

4.5推送本地版本到远程仓库

git push -u origin master
git push origin master

两条代码分别适用于第一次推送和以后推送,功能是推送最新分支到远程仓库。

5.分支管理

5.1创建切换合并分支

分支就是时间线,如果你一直在同一分支下更新版本,那么就是一条时间线。假如你创建了一个新分支,就是在当前位置多创建了一条平行的时间线。

git branch

这条指令用于查看分支当前状态。

git checkout -b <name>

这条指令功能是创建并移动到分支 dev。相当于下列两条指令:

git branch <name>
git checkout <name>

 

切换分支:

git checkout<name>

另外廖雪峰老师还提到如下指令切换分支: 

git switch -c <name>

但经过我的实验,switch命令在我的2.7版本中以及取消。 

合并分支:

git merge<name>//合并某分支到当前分支

删除分支:

git branch -d <name>

6.标签管理

6.1创建标签

标签是指为某个版本做一个标签,虽然每个版本有相应的版本编码,但出于版本数量过大的原因,软件在生成代码的时候采用十六进制十分复杂并不利于记忆或者操作,这时候就需要使用标签功能对某些成熟的版本加上"名字"。

创建标签:

git tag<tagname>

用于创建一个标签,默认标记为前版本标签,也可以在后面添加commit版本号为特点版本打上标签,如下:

git tag <tagname> commit_id

还可以为标签添加说明:

git tag -a <tagname> -m "describe"

6.2推送及删除标签

git push origin<tagname>//推送本地标签到远程仓库
git push origin --tags//推送全部本地标签
git tag -d<tagname>//删除一个本地标签
git push origin :refs/tags/<tagname>//删除一个远程标签

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值