Git初级教程
一、下载git
二、原理
git就是一个软件管理器,不同一般的是它是分布式的,不仅有一个中心的服务器控制最新版本代码,而且每个开发者自己还有个本地仓库,所以在开发过程中都是先将代码提交到本地仓库再推送到中心服务器上的,这样的好处就是每个人都依赖于中心服务器来实现交互,但又不会被中心服务器限制,就算中心服务器挂了,也能很容易的找到最新版本的代码,而且我自己的工作依然可以顺利进行,提交到本地仓库,当中心服务器修复之后,再将自己仓库的东西推送到中心服务器。

- 工作区 (workspace) 当前工作空间
- 暂存区 (index) 暂时存放在暂存区中的文件将随着一个 commit 一起提交到 local repository
- 本地仓库 (local repository) git 是分布式版本控制系统,和其他版本控制系统不同的是他可以完全去中心化工作,你可以不用和中央服务器 (remote server) 进行通信,在本地即可进行全部离线操作
- 远程仓库 (remote repository) 中心化仓库,所有人共享,本地仓库会需要和远程仓库进行交互,也就能将其他所有人内容更新到本地仓库把自己内容上传分享给其他
那么如何拥有自己的git仓库:
- 一 是在自己已有的目录里初始化自己的git仓库然后和中心服务器建立连接,更新最新代码到自己的git仓库
- 二 是将一个已经存在的项目克隆到自己的目录成为自己的git仓库
执行git init命令,就会创建并初始化git仓库,这个时候在该目录下会产生一个.git的隐藏文件夹,而该目录就是你的工作目录,你的一切行为都是在这个目录里,而这个.git文件夹就是你的本地仓库。
- config文件,这是你项目的配置文件,里面有中心服务器的信息和分支信息
- HEAD文件指向当前的分支
- index文件是暂存区的相关信息
- logs目录中都是相关操作产生的日志
Git基本命令:
- git init
- git clone
- git status
- git add
- git commit
- git checkout -b
- git reset
- git pull
三、git基本使用
- 在github上新建项目
- 在本地新建文件夹test
- 进入本地文件夹执行git init生成本地仓库.git
- git clone远程项目
- 修改本地代码
- 添加远程仓库元数据信息(git remote add origin https://github.com/ShenJianPing0307/test.git)
- 此时与远程仓库进行了联系,通过git pull测试,如果出现fatal: unable to access 'https://github.com/ShenJi
anPing0307/test.git/': OpenSSL SSL_read: Connection was reset, errno 10054
进行配置文件修改:.git/config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://github.com/ShenJianPing0307/test.git
fetch = +refs/heads/*:refs/remotes/origin/*
# 加入下面两行
[http]
sslverify = false
[https]
sslverify = false
或者通过命令:
git config --global http.sslverify false
-
刷新DNS
ipconfig /flushdns
-
测试 git pull
-
修改文件后提交代码需要设置用户名
这是git的配置,代码提交后会出现提交者的信息
git config --global user.email "gitHub邮箱" git config --global user.name "gitHub用户名"
查看配置信息:
git config --list --show-origin
-
git add / git commit -a / git push origin master
通过push提交到远程仓库,还是需要github的认证,这一步可以通过ssh连接解决
四、SSH连接
SSH 为 Secure Shell 的缩写,为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。
- 使用方式
配置好SSH密匙后,本地代码pull/push就更简单了。
# 命令生成
ssh-keygen -t rsa -C "youremail@example.com"
# 获取id_rsa.pub,将生成的id_rsa.pub添加到gitlab中的ssh管理处
cat ~/.ssh/id_rsa.pub
如果出现:The authenticity of host 'github.com (20.205.243.166)' can't be established.填写yes
然后进行:
- git clone ssh连接
- 修改代码
- git add .
- git commit -m
- git push origin master
五、代码管理
-
git log 查看commitid
-
回退
# 回退到当前版本 git reset --hard HEAD # 回退到上一个版本 git reset --hard HEAD^ # 回退到指定版本 git reset --hard 94e2d6b5d2ecd2ef800046053626e5fff0e364c0
-
分支
# 新建分支
git checkout -b dev
# 切换分支
git checkout dev
# 查看分支
git branch
# 合并分支,将dev分支合并到当前分支
git merge dev
六、git标签
(一)什么是tag
tag是git版本库的一个标记,指向某个commit的指针。
tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签。
tag感觉跟branch有点相似,但是本质上和分工上是不同的:
tag 对应某次commit, 是一个点,是不可移动的。
branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。
tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支。
(二)标签基本操作
- 项目准备
提交几次版本
git log --oneline --graph
- 查看标签
git tag
or
git tag --list
- 查看标签详细信息
git show tagName
- 创建标签
# 轻量级标签 git tag tagName
git tag tagName
# 指定版本号 commitid创建轻量级标签
git tag tagName(v1.0) commitid(038541ad)
# 创建附注标签,git tag -a v1.0 -m "first commit"
git tag -a tagName -m message
# 给指定的提交版本创建一个【附注标签】
git tag -a 标签名称 提交版本号 -m 附注信息
- 删除标签
# git tag -d 标签名称 : 删除指定名称的标签
git tag -d 标签名称
- 推送到远程仓库
# git push origin 标签名称 : 将指定的标签上传到远程仓库
# git push origin --tags : 将所有不在远程仓库中的标签上传到远程仓库
git push origin 标签名称
or
git push origin --tags
- 删除远程仓库的标签
# 删除远程仓库中的 指定标签
git push origin :regs/tags/标签名称
or
git push origin --delete 标签名称
- 检出标签
在这个标签的基础上进行其他的开发或操作
检出标签的操作实质 : 就是以标签指定的版本为基础版本,新建一个分支,继续其他的操作。
因此 ,就是 新建分支的操作了。
git checkout -b 分支名称 标签名称
七、作业
通过git init方式:
- 进入项目目录 通过git init初始化本地仓库
- 远程新建一个新仓库,获取https或者SSH地址
# 添加远程仓库信息
$ git remote add origin https://github.com/ShenJianPing0307/test2.git
- 拉取仓库最新代码
git pull origin master
如果出现错误:
$ git pull origin master
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 7 (delta 1), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), 1.82 KiB | 143.00 KiB/s, done.
From https://github.com/ShenJianPing0307/test2
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
fatal: refusing to merge unrelated histories
通过命令:
git pull origin master --allow-unrelated-histories
推送代码:
$ git push origin master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 573 bytes | 573.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/ShenJianPing0307/test2.git
5e27262..fa08055 master -> master