01 Git的介绍与安装
Git 简介
- Git是目前世界上最先进的分布式版本控制系统(没有之一)。
- Git有什么特点?简单来说就是:高端大气上档次!
- 官网注册账号: https://github.com/
- Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 与 SVN 区别
GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。
Git 与 SVN 区别点:
- 1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
- 2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
- 3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
- 4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
- 5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
最大的 区别就是svn是局域托管。
Git 安装配置
在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:http://git-scm.com/downloads
下载完双击安装
使用git:点击进入 Git Bash
仿linux黑屏终端
配置用户名 git config --global user.name "你自己GitHub的用户名"
配置邮箱 git config --global user.email "自己的GitHub的注册邮箱"
02版本库
什么是版本库?
又名仓库,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除、Git都能跟踪,以便任何时刻都有一个追踪历史,或者在将来某个时刻可以还原。
创建版本库
1、在合适的地方,创建一个空目录(随便在电脑上创建一个)
2、cd 进入
3、使用git init 命令把这个目录变成Git可以管理的仓库
4、创建成功
注意:千万不要手动修改.git目录的配置文件(默认为隐藏文件),看下图
把文件添加到版本库
可以把 sunck 文件夹看成是一个仓库,但真正的仓库是 sunck 文件夹下的 .git 目录
- 在仓库目录中创建一个sunck.txt 文件 添加 sunck is a good man 为内容
- 把文件添加到仓库 git add sunck.txt
- 把文件提交到仓库 git commit -m "注释信息"
- 放入成功
时光穿梭机
git status 命令可以让我们时刻掌握仓库当前的状态
修改sunck.txt文件内容为 sunck is a nice man
git status 命令再次查看
gid diff 命令可以查看修改的内容
git log 该命令可以显示从最近到最远的提交日志
修改 sunck.txt 文件内容为 sunck is a handsome man 提交
git log 命令再次查看
也可以使用 git log --pretty=oneline 按行查看
版本回退
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上上版本
git reset --hard HEAD~100 回退到上100个版本
git reset --hard 具体版本号 回退到具体版本
查看内容,命令:cat sunck.txt
回退到具体版本,版本号在回退的时候不用写具体版本号,可以只写前4、5、6位
HEAD 相当于一个指针、指向哪里使用哪里
git reflog 该命令记录每一次命令
03工作区和版本库
工作区和版本库
工作区
工作区真正意义存在于./git目录下的add工作区,但是我们可以泛指是写代码并add(添加)的地方叫做工作区(也叫仓库所在的目录)
版本库
定义:.git目录是Git的版本库,分为:
- 暂存区(state)
- 自动创建的一个分支(master)
- 指向master的指针(HEAD)
git checkout -- fileName (速度更快些):撤销的意思
第一:工作区域缓存区代码不一致,没有 add 和 commit
执行 git checkout -- fileName
如果 fileName 文件自修改后还没有被放到暂存区,现在,撤销修改就会回到和版本库一模一样的状态。
第二:再次修改工作区的代码添加到缓存区:
暂存区的代码:sunck is a very handsome man
再一次修改工作区的代码:
以上情况是工作区、暂存区、版本库三个地方的代码都不一致
如果 fileName 文件已经添加到暂存区, 又做了修改,现在,撤销修改就回到添加到暂存区后的状态
总之,就是让这个 fileName 文件回到最后一次 git commit 或者 git add 时的状态
04创建与关联远程仓库
创建SSH Key
黑屏终端输入 ssh-keygen -t rsa -C '自己GitHub的注册邮箱'
.ssh: id_rsa:私钥 id_rsa.pub:公钥
复制公钥,公钥末尾的邮箱添不添加无所谓
登陆 github 官网
选择 ssh and gpg keys
创建key
自定义名称,添加公钥:第一次配置钥匙需要输入密码
测试秘钥是否通过
命令:ssh -T git@github.com
创建远程仓库
public是公有的可以访问下载,private(收费)是不可下载
Initialize this repository with a README 是指 初始化
add.gitignore 指的是可能提交代码有一部分是不用提交的比如第三方库。
关联远程仓库
远程仓库地址获取方法:
git remote add origin 远程仓库地址 进行关联,PC与远程仓库关联
删除关联:git remote rm origin
注意:
1.推送本地库内容到远程库:git push origin master,注意需要先把远程库内容拉倒本地,否则会报错;
2.忽略特殊文件 .gitignore #该文件可以将不想上传到远程库的文件名写进去就可以实现
3.拉取远程库内容到本地库:git pull origin master
出现错误与解决办法:
这种报错是因为本地和远程的库版本不同
在执行命令 git pull origin master --allow-unrelated-histories 会进入 vim
直接英文 :q 就可以退出 vim ,退出后显示成功:
同时会在你所创建的 sunck 文件夹内出现 README.md:
推送本地库内容到远程库:git push origin master
进入 github 查看:
从零开发:正常开发我们本地是没有库的,so,先把本地库删除掉
- 先有远程库
- 从远程库克隆 git clone 远程库地址
git clone git@github.com:lianxi19930822/sunck.git
已克隆到本地,本地仓库位置会发生变化(无所谓)
进入本地库并查看
修改或添加代码
推送到远程库:
1. git add 文件名
2. git commit -m "注释信息"
3. git push origin master
进入GitHub 查看:
查看添加或修改代码是否成功:
特殊文件:.gitignore
1.必须是 .gitignore 这个文件名,不可更改
2..gitignore 文件里所标识的文件或目录是不会推送到 GitHub 远程库,一般大文件是不会往 Git 上推送的
也可以在仓库目录下进行手动创建
例子:将 bao 这个文件名添加到 .gitignore 文件里面
推送至远程库:
查看远程库:
查看 .gitignore 文件
05分支管理
作用
- 假设你准备开发一个新的功能,但是需要两周才能完成,第一周写了50%,如果立即提交,由于代码还没有写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又会存在丢失每天进度的巨大风险。
- 有了分支,可以避免上述问题。创建一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而我们在自己的分支上干活,想提交就提交,知道开发完毕后,在一次性合并到原来这个问题我的的分支上,这样,既安全,又不影响别人工作。
特点
Git的分支是与众不同的,无论创建、切换和删除分支,Git在非常短的时间内就能完成!无论版本库是一个文件还是一万个文件。
master主分支
- 在版本回退中,每次提交,Git都把它们串成一条时间线,在Git里,这个分支叫主分支,即master分支,HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支。
- 每次提交,master分支都会向前移动一步,这样,随着不断提交,master分支的线越来越长。
创建分支
创建分支 git branch 分支名
查看当前分支 git branch 会列出所有分支;当前分支前会有一个 * 号
切换分支 git checkout 分支名
创建与切换同时进行 git checkout -b 分支名
在 wrp 分支下添加代码
添加并提交 wrp 分支下代码
在切换到 sck 分支下
查看 sck 分支下代码
切换到 master 主轴下
查看 master 主轴下代码
再次切换到 wrp 分支下
并查看 wrp 分支下代码
注:每一个分支都可以提交,保证自己的数据不丢失,并不影响其他分支,各司其职
添加或修改 wrp 分支下代码
并提交到版本库:
合并分支:想往谁的身上合就要走到谁的身上
把 wrp 分支的工作成果合并到 master 主轴上
图解:
合并命令:git merge 分支名
合并成功后查看代码:
将合并成功后的代码推送至远程库:
查看远程库:
以上讲解只是在演示知识点:创建、合并、推送,若我们自己真正在开发的时候不能和上面讲解一样,一直在主分支(master)上操作,我们在远程库上要有自己的分支,正常开发的代码应当提交到自己的分支上,只有在开发完成后,才能将自己分支上的内容合并到主分支上。
删除分支 git branch -d 分支名
删除远程分支 git push origin :分支名 git push origin --delete 分支名
将远程库上的内容拿下来后,在自己的分支上开发:
附上图:命令 git commit 会直接进入 vim,注释可在 vim 里编写,但不建议使用
在远程库上创建自己的分支,有两种方法:
第一种:在远程库上直接创建
第二种:
建立本地分支和远程分支的关联,使用命令 git push --set-upstream origin 分支名 该命令往远程库推送数据的同时也会在远程库上创建一个分支(要在自己的分支下推送,有更新就提交上去)
在 GitHub 上查看创建好的分支:
在 GitHub 上查看代码:
再次添加或修改代码
推送至远程库
查看推送至远程库 wrp 分支下的代码
删除本地库并关闭黑屏终端
克隆远程库到本地
注:每次从远程仓库克隆的时候只能克隆只有master主分支的库,但是你可以从本地库建立一个分支,再使用 git pull origin 分支名 拉取其分支内的文件,真正在使用的时候,在写完的时候可以提交到本地的主分支上,再从主分支上传到远程库。
重新创建本地分支并拉取远程库数据
假设现在 wrp 分支代码已完成要与主分支合并
将 wrp 分支已完成代码提交到版本库,并没有推送到远程库
切换到主分支
查看主分支代码
wrp 分支与主分支合并
将合并数据推送至远程库主分支上
查看远程库
现在另一个人 XXX 在工作时要写代码,但TA没有版本库,就必须把远程库克隆到本地
克隆成功并进入本地库目录下
XXX 现在没有分支,那就创建分支
使用命令:git push --set-upstream origin 分支名 将分支推送到远程仓库,第一次推送分支需要使用此命令
查看远程库
添加或修改 XXX 分支下代码
推送到远程仓库XXX分支下
查看远程仓库XXX分支,推送成功
当再次需要开发代码时,从远程仓库克隆到本地,重新在本地创建XXX分支,并拉取远程仓库XXX分支,然后更新代码提交到版本库与主分支合并,推送至远程仓库。
在自己的分支上干活,完成后可往主分支上合并,你可以往主分支上合并,也可以把主分支往你的分支上合并。
忠告:一般在公司工作中不要随便把自己的代码往主分支上合并,容易把远程仓库搞乱,除非领导说让你合并,如果擅自合并有可能被开。
分支合并时冲突
如果主分支上的代码比你自己分支上的代码多,你可能从远程仓库拉取到本地不成功
重新推送
查看远程库:
与主分支合并,
现在wrp分支与主分支代码一致
更新wrp分支下的代码
更新主分支下的代码
主分支与wrp分支的代码都更新过并且都提交到版本库了,现在到底听谁的,合并之后到底显示谁的内容
不想要哪个分支的代码就删除谁的
将修改好的代码提交到版本库
git log --graph 查看分支合并图,会形成树状的一种结构
分支策略
- master分支应该是非常稳定的,依旧是仅用来发布新版本,平时不能在上面干活
- 干活都在dev分支上,也就是dev分支是不稳定的,到某个时候,比如1.0版本时,再把dev分支合并到master上,在master分支上发布1.0版本(可以将dev理解为副master)
- 你和你的小伙伴每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支合并就行
推送分支
- git push origin master
- git push origin dev
抓取分支
- 从远程库clone时,默认只能看到master
- 想在dev分支上开发,就必须创建origin的分支到本地
- git checkout -b dev origin/dev
工作模式
- 可以试图使用git push origin branch-name 推送自己的修改
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull 试图合并
- 如果合并有冲突,则解决冲突,并在本地提交
- 如果有冲突或者解决冲突后,再用git push origin branch-name 推送就能成功
- 如果git pull 提示“no tracking information ” ,则说明本地库分支和远程库分支链接未创建,用命令:git branch --set-upstream branch-name origin branch-name
06标签管理
意义
发布一个版本时,我们通常现在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本的一个快照。
打标签:git tag 标签名
更新代码
提交到版本库并且打上标签
查看所有标签: git tag
切换到指定标签: git checkout 标签名
指定commitID打标签,每一次提交到版本库打标签:git tag 标签名 commitID
查看说明文字:git show
git show 标签名
推送本地标签到远程库:git push origin 标签名 能推送就能拉取
查看推送到远程库标签
查看版本内容
以上是简单说明一下常用的标签命令
标签的使用:总的来说:上线的时候都会打标签
git tag 标签名 打标签
git tag 查看所有标签
git tag 标签名 commitID 指定commd id 打标签
git tag -a 标签名 -m '标签信息' 指定标签信息
git checkout 标签名 切换到指定标签
git show 标签名 查看说明文字(含有添加的内容)
git tag -d 标签名 删除标签
git push origin 标签名 推送标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
删除已经推送到远程的标签
- 先从本地删除 git tag -d 标签名
- 再从远程删除 git push origin :refs/tags/标签名
07删库
壹:
贰:
叁:
肆:
调整黑屏终端字体
壹:
贰:
叁:
Git 常用命令大全
转载需声明出处:
https://blog.csdn.net/halaoda/article/details/78661334?tdsourcetag=s_pctim_aiomsg