git知识整理

一. 什么是Git
1.Git是什么
Git是目前世界上最先进的分布式版本控制系统(没有之一)。

我是一个任性的笨蛋,所以我把我的所有的项目的名字都和我很相似。第一个是Linux,现在是Git。

目前在用的有如下几种:
 cvs (可以忽略)
 svn
 git
2.为什么需要Git
就以写毕业论文为例

这是一个很痛苦的过程。

在软件开发。
项目,已经完成了基本功能。可以使用了。
想在基本功能的基础之上,增加新的功能,此时有两条路:
 直接在原来的代码上进行开发 (不可取)
 先保存一个副本,继续开发 (可以,但是不好)

对后期的维护造成灾难。这还是其一。

更为重要的是在协同开发的时候,如果没有一个好的方案,项目的开发效率会大大降低。
团队开发的时候,除了代码本身,相互之间的协作是一个很重要的因素。

版本控制,就是可以解决上述这些问题?
 自动记录每次的修改,并且可以方便的切换到任一版本-- 版本迭代
 可以完成多人协作开发
3.Git和GitHub有何区别
Git,是一个版本控制系统,是一个工具,命令行的工具。
Github,是一个网站,(全球最大的同性交友平台),托管代码的平台。基于git版本控制系统的一个网站。

学习的时候,要学习Git。

二.快速入门
1.安装Git
Git,针对三大平台都有相应的安装包:
 Linux
 Mac
 Windows

我们以windows平台为例。

下载地址:https://git-scm.com/downloads/

安装
 安装到哪儿 - 任何地方
 怎么安装 – 一路next下去

安装完成之后,我们的任何目录下,都可以使用右键菜单,运行窗口或图形用户界面

重点是学习 命令行的方式。

Ps:git bash,也可以作为windows的cmd窗口来使用。

最简单的安装:什么都不管,直接一路next到底。
2.使用流程
典型的使用流程如下:
 初始化一个Git仓库(git init)
 设置用户名和邮箱
 添加文件到仓库(git add 文件名1 文件名2 )
 提交 (git commit -m 说明文字)
 查看版本 (git log)
 回退 (git reset --hard HEAD^/commit_id)
(1).初始化一个Git仓库(git init)
一般来说,我们只要开发项目,就应该使用git。

在项目目录下, 使用git init

以.开头的文件/文件夹,通常都是隐藏文件/文件夹。

需要在操作系统中,设置显示隐藏的文件

可以看到这个.git目录

这个.git目录,就是我们的版本仓库。
版本仓库,是不能写代码的,是用来保存项目的信息的。
(2).设置用户名和邮箱
需要使用 git config --list,查看是否已经配置了用户名和邮箱信息:

如果有,就可以略过。
如果没有,就需要增加。

Git config user.name 用户名
Git config user.email 邮箱

用户名和邮箱,在本机使用,可以随意配置,如果要配合github,就需要github的账号。

(3).添加文件到仓库(git add 文件名1 文件名2 )
现在,就可以正式开发了。

当我认为,某一个功能已经开发完毕,需要形成一个版本。
将其添加到版本仓库

我添加了一个文件和一个文件夹。
(4).提交 (git commit -m 说明文字)
使用git commit -m 来提交到版本1。

(5).查看版本 (git log)
现在就可以查看版本信息了。

然后就是重复3~4 这两个步骤。

查看版本,

(6).回退 (git reset --hard HEAD^/commit_id)
可以使用 git reset --hard HEAD^ 可以回退到上一个版本。

查看项目目录:

发现,在第二个版本中增加的list.html已经不见了。
说明,我们已经回退到第一个版本了。

使用git log查看,如下:

我又后悔了,需要回到第二个版本。

可以直接使用 git reset --hard commit_id
如下:

三.Git基本概念及原理
在上述的操作流程中,有两个地方不太好理解。
就是git add 和 git commit。

需要搞清楚git的基本原理
同时,有一个概念需要搞清楚。
1.基本概念
要想用好git,必须搞清楚几个概念
 工作区
 版本库
 暂存区
 分支

所谓的工作区,就是我们进行常规开发的目录
所谓的版本库,就是指git init时创建好的.git目录。

一句话:凡是.git之外都属于工作区。(在当前项目目录下)

在版本库中,有分为:
 暂存区 stage
 主分支 master

暂存区,就是暂时存储文件的区域。
主分支,最终的版本存放的区域

2.基本原理
我们的代码,都是在工作区中进行的。
当我们认为某一个功能已经开发完毕,需要形成一个版本。此时,就可以仓库提交。

Git add 文件名
使用git add,只是提交到版本库中的state(暂存区),此时并没有形成真正的版本。而是在暂存区放着呢。

如果需要变成真正的版本,需要使用 git commit 命令
使用git commit 命令,可以将暂存区中存放的所有文件,一次性提交给主分支,形成一个版本。

在这个过程中,真正的核心是 ------ 暂存区

暂存区 可以理解为中转站
也可以理解为秘书。

对于刚才的那个流程,可以描述如下:

四.基本操作
git有两大核心功能:
 版本控制
 多人协作开发
目前介绍的基本操作,基于单人开发
1.git config
配置命令
 查看所有配置 git config --list
 获取配置 git config 配置名
 设置配置 git config 配置名 值

2.git init
在项目开始的阶段,就需要使用git init 来初始化我们的版本仓库。
有两种用法:
 git init 项目名称
 先建好项目目录,然后在目录下使用git init

第一种方式:

第二种用法:

一旦使用了git init命令,就会创建一个.git目录,作为当前项目的版本仓库。

3.git add
作用:将我们的项目文件,添加到版本仓库中的暂存区。
用法:git add 文件名1 文件名2 文件名3
也支持文件夹。

可以使用git status 命令查看版本仓库的一个状态。

可以不停的重复这个动作。
4.git commit
作用:将暂存区中的文件,提交到版本库的主分支
格式:git commit -m 说明

在使用git commit命令的时候,一定要添加说明信息。

说明信息的添加,有两种方式:
 使用 -m 参数,推荐
 使用vi编辑器 不推荐

我们在使用git commit时,没有添加-m,就会进入vi编辑器的模式
vi有两种模式:
 编辑模式,按 i 键
 命令模式,按esc键

退出命令 :q
保存并退出 :wq
强制退出 :q!

推荐使用 -m 参数如下:

提交完成,就得到一个新的版本。

5.git status

作用:用于查看版本仓库的一些信息
格式:git status

在刚创建好版本仓库时,如下:

当我们在工作区,增加新的文件之后,使用git status查看如下:

它提示说,文件没有放入暂存区,没有和版本库建立任何关联。
并且提示我们使用 git add 将其加入到暂存区。

当我们使用 git add 命令将其加入到暂存区,再看查看,如下:

使用 git commit -m 提交,再次查看

可以这么理解:查看暂存区的情况。
6.git reset
作用:重置到指定的版本
有两种,软重置和硬重置,一般主要是使用硬重置。

格式:
git reset --hard commit_id (推荐)
git reset --hard HEAD^ ,回退到上一个版本
git reset --hard HEAD^^ ,回退到上上一个版本
git reset --hard HEAD^^^,回退到上上一个版本

git reset --hard HEAD^n ,回退到倒数第n个版本

举例,有如下三个版本:

当前是在最新的版本,回退到第二个版本。

回退之后,第三个版本中新增的那些文件就没有了。

后悔了,又想回到第三个版本。
分两种情况:
 第三个版本的commit_id已知
 第三个版本的commit_id未知

如果是已知的,简单,直接回退即可:

如果是未知。
比如,昨天刚回退一个版本,今天上班了,后悔了。

查看记录。 Git reflog

找到这个commit_id的快捷方式,就可以回退到任意版本。

五.多人协作开发
git还有一个非常强大的功能-- 多人协作开发

1.多人协作原理
多个人同时管理一个版本库。
典型的做法是,首先创建一个git服务器,被多个人所操作

2.多人协作实现
基本步骤如下:

 创建一个git裸服务器 (git init --bare)
 从裸服务器将版本库克隆至本地(git clone )
 本地常规操作
 推送版本至服务器 (git remote + git push origin master)
 从远程服务器拉取版本(git pull)

说明:一般来说,服务器其实都应该是在linux操作上进行的。我们现在是在windows上模拟这个过程。
(1).创建一个git裸服务器 (git init --bare)
使用命令 git init --bare

在web03目录下,新建一个文件夹git-server,然后使用命令创建如下:

分析和前面git init的区别:
 不同的地方:git init 命令会创建一个.git目录,而git init --bare则没有
 相同的地方:所创建的那些文件是一样的

说明他们的功能是不一样的。
.git目录是 工作区和版本仓库的一个分界线。
既然现在没有了.git分界线,说明当前这个目录是一个整体,是版本仓库。
也就意味着,我们不能在这个目录上编写任何代码

所以,裸服务器只提供了版本仓库,不能在当前目录下编写任何代码。

团队的每一个程序员,都需要进行后续的操作。
(2).从裸服务器将版本库克隆至本地(git clone )
程序员甲,开始工作了。
将服务器上的版本库仓库克隆至本地。

格式: git clone 地址
此处,在windows操作系统下,地址可以使用绝对路径来表示。

(3).本地常规操作
克隆完这个版本仓库之后,就可以在本地进行常规开发及版本控制操作。

如,编写代码

这个功能已经开发完毕。
需要提交至版本库。
首先,还是在本地上面进行版本库的管理。

(4).推送版本至服务器 (git remote + git push origin master)
面临两个问题:
 服务器在哪儿?
 如何推送?

使用git remote 命令获取服务器的名称。

使用 git push 远程服务器名称 分支

此时,我们需要来看看乙是怎么操作。
说明甲已经上了一个星期的班,乙新加入进来的。
对于乙而言,需要重复上面的2~4过程。

第一步,需要clone至本地

对于乙来说,它目前得到的就是服务器上的最新版本。

第二步,乙在本地进行常规开发及版本控制。
乙负责编写样式。

完成开发任务,需要提交至新的版本。

在本地提交版本。

第三步,将本地的版本推送至服务器。

乙可以休息一下了。
(5).从远程服务器拉取版本(git pull)
又轮到甲来开发了。
在本地进行常规开发和版本控制。

本地提交版本。

然后,甲想把这个最新版本推送至服务器。

思考:
目前服务器是什么版本?自己的是什么版本?
应该得到什么样的版本?
服务器上的最新版本:

甲自己的最新版本

我们发现,甲的最新版本和服务器的最新版本不一致。

我们希望的版本:

如果直接push,让服务器很为难。所以它就报错。

此时,需要将服务器上的最新版本拉取到本地。然后再推送。
原则:在推送至服务器版本仓库的时候,需要确保自己的当前版本是最新的。

所以,就需要从服务器上拉取最新的版本。
不要使用git clone。
需要使用 git pull

Pull的时候,也需要增加说明。使用默认即可。
再次查看甲的版本,如下:

然后,就可以将这个推送至服务器了。

此时,服务器的最新版本就是甲的这个版本。

此时,乙就不是最新版本了。如果想使用最新版本。
所以,也需要使用git pull拉取。

在实际开发时。
一般是这样的
 正式开始开发项目时,使用git clone 将服务器上的版本库克隆到本地。
 各个程序员在自己的本地进行常规开发及版本控制。
 拉取最新版本。
 推送自己的版本到服务器。

注意一个问题:
如果两个程序员都操作了同一个文件,就会发生冲突。需要协商解决。

六.分支
1.什么是分支
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险,怎么办?

可以有两种解决方案:
 在本地进行开发并且进行版本控制,不要去同步到服务器。如果你想看看项目开发的怎么样,此时就有点麻烦。
 可以使用分支来。

你可以创建一个属于自己的分支,别人看不见,还继续在原来的分支上工作,而你在自己的分支上进行开发,等开发完毕,合并即可。

branch,树枝。分支

2.分支的基本操作
(1).查看当前分支 (git branch)

默认,就只有一个分支 – master。
版本,都是基于分支的。
是在自己的分支上,创建各个版本。

(2).创建分支 (git branch 分支名)
命令 git branch 分支名

(3).切换分支(git checkout 分支名)
默认,当前分支是master,如果需要在其他分支上进行操作。
需要切换分支。
命令:git checkout 分支名

接下来,对版本的操作都是基于b1分支的。
(4).分支上的常规操作
原来在master上进行的常规操作,在其他分支都是一样的。

一旦切换到新的分支,所有的版本操作都是基于这个新的分支,原来的master就不动了。

在b1上查看版本

在master上,查看版本

很多的开源项目都提供了这么分支功能。

(5).分支的合并
分两步:
第一步,切换到主分支,git checkout master
第二步,使用merge命令,git merge 分支名

查看主分支,如下:

意味着将b1分支的版本都已经合并到master中去了。
(6).分支的删除
命令:git branch -d 分支名

在主分支上,使用这个命令,如下:

3.分支的基本原理
默认在主分支上,如下:

创建了一个dev分支,并且切换到dev分支,如下:

在dev分支上,进行版本控制操作
此时,所有的版本操作都是基于dev分支的,master就相当于冬眠了。

在dev分支上完成开发,合并到master主分支,如下:

dev分支的使命已经完成,需要删除dev分支

七.结合GitHub使用
1.什么是github?
必须要搞清楚git和github的区别。
Git是一个分布式版本控制系统,是一个工具。
GitHub是一个托管代码的网站,是一个平台。基于git的网站。

Github:全球最大的同性交友平台。

基本上,我们描述某一个程序员的水平,有两点是可以直接证明的:
 技术性博客
 自己的github账号,开源一些不错的代码/项目

2.GitHub的基本使用
https://github.com/
需要注册账号。
基于git的代码托管平台。
原来在git命令中完成的操作,就可以使用界面操作来完成。

可以新建一个版本仓库,对应于git init命令。

填写配置信息,如下:

编写文件

进行提交

点击这个按钮,底层做了什么操作?

相当于执行了 git add + git commit -m 两个命令。

3.将GitHub作为服务器完成协同开发

刚才上面的操作,就是一个单人的版本控制。

有多个人完成协同开发。
如果是项目没有那么多的秘密,可以使用这个github平台。

创建一个新的项目(版本仓库)

让其它程序员,把这个作为服务器。协同完成开发。

步骤:
第一步,需要将项目克隆到 本地。
Git clone https://github.com/diamondwang2013/web03
如下:

第二步,在本地,进行常规开发和版本控制。

在本地完成版本提交

第三步,推送至github

这一步,需要输入用户名和密码

然后查看,服务器如下:

接下来,如果需要从github服务器上获取最新的版本。就是要git pull命令即可。

还有一个操作,如下:

Github上,有很多好的项目(代码)。
我们可以在这里找到很多资源。

如何运行github上的项目

https://github.com/superman66/vue2.x-douban

查看说明:

然后进入项目目录

使用npm install 安装即可

八.总结
Git是什么东西?
Git是一个分布式的版本控制系统。

所谓的分布式,就是基于服务器的架构。
不需要时时刻刻都连上服务器。只要在推送和拉取的时候,连接服务器就可以。
其它的时候,我们在本地直接进行操作就可以了。

版本控制系统可以做什么?
 对项目版本迭代,版本管理。
 可以完成多人协作开发

具体的使用。
a.单人的版本管理操作
git init 初始化一个版本仓库
在工作区进行常规的开发
某个功能开发完毕,可以git add + git commit 提交到一个版本(master)
重复上述过程。
在开发过程中,如果需要回退到某个版本,使用git reset + git reflog

b.多人协作开发

  1. 创建一个git裸服务器
  2. 各个程序员,需要从服务器将版本库clone至本地
  3. 在本地进行常规开发及版本控制
  4. 从远处拉取最新的版本
  5. 推送新的版本至服务器
    重复 2 ~ 5 过程

操作练习一遍。
可以将这个写入你的简历。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值