前言
在几个月前,我写了一篇关于git和github中的指令的总结,但是最近自己使用的时候发现,有些指令并不是一两句话就能够说清的,所以,我写了这篇博客,希望不论是自己参考还是其他人来参考,都能够很容易的找到使用哪一条指令,并且明白该指令的具体用法。
一、关于git和github和码云
git:
1>分布式版本控制软件
2>它就是一个安装在我们电脑上的软件
3>我们使用它来管理电脑的文件夹(仓库)
4>管理的是文件夹内所有的文件的时间节点
5>可以使用Git把我们本地电脑上的文件夹上传到远程仓库
github:
1>线上的一个网站
2>它可以保存我们使用git上传的代码
3>还是一个社交平台
4>开源代码
码云:
也是一个网站 功能和github差不多
github是全英的
码云是国内的
是一个中文网站
二、安装git
git的安装:
git不是JS的库,就是一个软件,不能使用npm来安装
下载:
官网:https://git-scm.com/
安装:
双击安装包 一路next
检测:
1. 鼠标在桌面上点击任何位置
会出现git bash here 和 git gui here
git hash 是git提供的命令行工具
2. 打开这个命令行工具
输入命令 git --version
如果说出现版本号,就表示git安装成功了
在git bash中,可以按ctrl+鼠标中键可以放大或缩小字体
首次安装的配置:
当我们第1次安装了git,需要我们做全局配置,这个配置是为了,把代码上传到远程来使用的。
如果说,你的代码不需要上传到远程,这个全局配置不需要做,但是基本使用Git,代码都是和远程仓库进行配合的。
配置如下:
1)打开Git bash,你要哪个目录下面打开,无所谓
2)输入一个命令,叫git config --list
3)配置全局邮箱
打开Git bash,你要哪个目录下面打开,无所谓
输入一个命令:git config --global user.email “你的邮箱”
这个邮箱,理论上,你可以随便写一个,最好使用真实邮箱,最好使用你注册github的邮箱
没有任何提示,就表示配置OK
4)配置全局用户名
打开Git bash,你要哪个目录下面打开,无所谓
输入一个命令:git config --global user.name “你的用户名”
这个用户名,理论上,你可以随便写一个,最好使用你注册github的用户名
这个配置可以不配,如果不配,只能管理你自己电脑的上文件夹,不能进行代码上传
git的使用:
安装,检测,配置完毕,就可以使用git了
使用git就是使用git xxx这些命令
在Git给我们提供的命令行工具中使用这个命令,当然,我们也可以在window电脑上自带的cmd窗口中使用命令。
三、git的使用
git是用来管理你的文件夹的。git并不会自动管理你的文件,你想让git管理你的文件夹,你需要告诉git。
1)初始化本地仓库
需要把一个普通的文件夹,初始化为一个git仓库
只有把这个文件夹,变成仓库,这样才能使用git来管理这个文件夹
步骤:
=>创建一个文件夹
=>打开文件夹,在空白处,点击鼠标右键,点击Git bash
=>输入命令 git init
=>此时,它就会把一个普通的文件夹,变成一个仓库,会提示你初始化仓库成功。
=>成功后,在出现一个.git的隐藏目录,如果你电脑上把隐藏目录或文件隐藏掉了,这个.git你是看不见的
=>.git所在的文件夹,这个文件夹中所有文件或目录,都交了git进行管理
=>我们可以把这个文件夹,叫本地仓库
2)当一个文件夹,被初始化成一个仓库了,这个文件夹会被虚拟成三个部分:
=>工作区 是你写代码写内容的真实位置
=>暂存区 暂时存储一些内容,存储的并不是时间节点,这个区域仅仅是暂时保存代码
=>历史区 如果把代码扔到历史区,就会形成一个历史版本,也叫节点
历史区存储的都是一个个的历史节点
我们可以在这个节点之间进行穿越
代码上传时,只能上传历史区的节点,不能上传工作区中的代码和暂存区中的代码
如果你历史区没有一个节点,那和你什么不会上传。
3)把工作的代码扔到暂存区
我的工作区的内容,不包含.git目录
步骤:
=> git add 文件名 把指定的文件扔到暂存区 什么也不提示就表示扔到了暂存区
=> 如果是一个空文件,可以扔到的暂存区,如果是一个空的目录,git是不会进行管理的
=> git add 文件夹名 表示把整个文件夹扔到暂存区 前提是文件夹中需要有内容
=> git add --all 把当前工作区中所有没有添加到暂存区的文件或文件夹扔到暂存区
这个命令可以简写:git add . .代表–all
4)查看工作区或暂存区文件的状态
打开有.git文件夹的目录,打开git bash
输入git status
如果显示红色,表示工作区的文件没有扔到暂存区
如果是绿色,表示暂存区中的文件没有扔到历史区
5)从暂存区撤回内容
打开有.git文件夹的目录,打开git bash
一些命令:
git reset HEAD – 文件名 把指定的文件从暂存区撤回
git reset HEAD – 文件夹名 把指定的文件夹从暂存区撤回
git reset HEAD – . 把暂存区所有的文件或目录撤回
6)形成历史版本(历史节点)
前提:只能把暂存区中的内容扔到历史区形成版本,不能直接把工作区的内容扔到历史区。
打开有.git文件夹的目录,打开git bash
一些命令:
git commit -m “说明” 就会形成历史版本
如果使用了git commit -m “说明” 会把暂存区中的内容扔到历史区,把暂存区清空
7)查看历史节点
查看本地仓库中的历史区都有哪些节点。
打开有.git文件夹的目录,打开git bash
命令:
git log log是日志的意思 表示查看历史区的版本
结果如下:
$ git log
// 历史版本的ID,唯一值,每一个历史版本都有一个唯一的ID
commit 039ec8bdc2aed49f9f950705a7792b1c5e000e4d (HEAD -> master)
// 作者 是在我们安装git时,进行的全局设置
Author: chengzhanwei1745494988@qq.com
// 生成此版本的时间
Date: Tue Jan 26 16:04:54 2021 +0800
// 生成版本时的一些说明 这个说明 不同的公司有不同的规范
secondcommit 5cba63bc048e14aa5d5801d05be2e29de7071de0
Author: chengzhanwei1745494988@qq.com
Date: Tue Jan 26 16:01:59 2021 +0800
first
8)回滚历史版本
回到之前的某一个版本。
打开有.git文件夹的目录,打开git bash
命令:
git reset --hard 版本ID 回滚到某一个版本 可以回到过去
如果回到了过去,又想从过去回到现在使用命令如下:
git reflog 查看所有的版本
结果如下:
$ git reflog
// 5cba63b版本的小ID 使用这个小ID也可以进行回滚
5cba63b (HEAD -> master) HEAD@{0}: reset: moving to 5cba63bc048e14aa5d5801d05be2e29de7071de0
039ec8b HEAD@{1}: reset: moving to 039ec8bdc2aed49f9f950705a7792b1c5e000e4d
844ba93 HEAD@{2}: commit: three
039ec8b HEAD@{3}: commit: second
5cba63b (HEAD -> master) HEAD@{4}: commit (initial): first
如果有多个版本了,我们可以回滚到过去的某个版本,在过去的某个版本中,也可以增加新的版本
如果在历史区已形了版本,不能再把文件扔到暂存区。我们可以删除某个历史版本。
9)删除历史版本
打开有.git文件夹的目录,打开git bash
命令:git rebase -i 历史版本ID
注意点:
1)历史版本ID 不能写你要删除的那个版本的ID
2)要写前一个历史版本ID
3)要执行完命令后,会进入到VI编辑器模式
需要按i键,进入插入模式,需要把pick变成drop
再次按esc,退出插入模式,输入:wq,保存退
4)如果你的代码已上传到了远程仓库,你删除的仅仅是本地仓库的历史节点,远程仓库中的这个节点是删除不了的
四、上传代码到远程仓库
git的上传操作
我们上传的是历史区中的历史节点,只有在本地仓库历史区中形成一个节点,才能把这个节点上传到远程仓库。
远程仓库:可以使用github,也可以使用gitee,还有coding
创建一个远程仓库:
需要注册一个github账号,登录之。
=>在github上,创建一个文件夹(仓库),右上角加号—>new repository
=>Repository name 仓库的名字 必填项
=>Description (optional) 描述 可写 可不写 也可以写中文
=>点击create repository
远程仓库地址: 一个远程仓库的地址有两种形式
https://github.com/chengzhanwei1024/ceshi001.git 暂时使用这种形式
git@github.com chengzhanwei1024/ceshi001.git
创建的远程仓库信息如下:
- …or create a new repository on the command line 创建本地仓库
- echo “# ceshi001” >> README.md 写一个ceshi001到README.md文件
- git init 初始化本地仓库
- git add README.md 把README.md这个文件从工作扔到暂存区
- git commit -m “first commit” 把暂存区中的文件扔到历史区形成版本
- git branch -M main
- // 把本地仓库和远程仓库进行关联
// remote远程 add添加 origin远程仓库的别名 也可以是其它名字 后面是跟一个远程仓库地址
// 关联后,如果说什么都没有提示,表示关联OK
git remote add origin git@github.com:yuanfang1024/ceshi001.git
- // push表示推送 把本地仓库中历史区中的节点推送到远程仓库
// -u 记录你本次推送到哪个地址,哪个分支
// 如果说下次推送还是这个地址,还是这个分支,可以直接写git push
// 如果说第一次不写-u 后面去推送时,需要告诉哪个地址,哪个分支
// origin 表示远程仓库的别名 main表示主分支
git push -u origin main
第1次推送时,会让写用户名和密码。由于我之前,推送过了,它会记住我的用户名
和密码。可以打开控制面板—>凭据管理器—>删除github相关的记录
第1次推送时,会弹出一个框框,让你输入用户名和密码,如果说密码输入错误,还会再给一次机会,
第2次给这个机会,不同的电脑,显示的不一样,有的电脑上,会以一个框框的形式显示,有的人电脑上
会以命令行的形式让你输入,如果第2次密码又输入错误了,那么就没有机会了。
特别说明,如果你确认你输入的用户名和密码是OK了,但是还是登录不成功,那么,你先去把你凭据管理器把
把之前的凭据删除掉。
我们发现每次上传代码到仓库都需要输入密码的话太麻烦,于是,我们可以使用另一个地址,避免这个问题。
配置ssh
前面,我们上传代码时,使用的是https打头的协议,每一次,我们还需要输入用户名和密码,不方便。
还有一个地址:git@github.com:chengzhanwei1024/ceshi.git 需要我们配置SSH。
如何配置SSH:
1)打开git bash 目录无所谓
2)输入一个指令: ssh-keygen -t rsa -C “你git全局配置的邮箱” 1935952410@qq.com
3)直接三次回车,就会生成密钥
4)在我们的电脑上找对应的密钥,路径:C:\Users\Administrator.ssh
5)找到对应的有pub文件,表示公钥
6)复制这个公钥
7)回到github中,点击右上角头像旁边的小三角,找到settings
8)选择SSH
9)点击SSH key后面的New SSH keys
10)title随便写 key就是我们copy的那个公钥
11)添加成功后,后面就可以使用另一个地址,此时,你就不需要写用户名和密码了
五、关于拉取远程仓库代码
拉取远程仓库代码:
- 1)自己拉取自己的远程仓库的代码
- 2)拉取别人远程仓库的代码
自己拉取自己的远程仓库的代码:
1)第一次拉取 就是克隆
=>需要把远程仓库克隆到本地 在本地某个地方,打开git bash,输入命令如下:
git clone 远程仓库的地址 这样就可以克隆一个和远程仓库一模一样的代码。
=>你克隆下来的文件夹也是一个仓库,默认就和远程关联好了。
=>克隆下来的仓库,如果你添加了一个新的版本,打算把新的版本推送到远程仓库,
不需要关联,直接推送,问题是需要知道远程仓库的别名,如何查看?git remote 这个命令就是查看远程仓库的别名。
2)后面,如果你想获取远程仓库的最新的代码,直接使用git pull 不要再使用git clone
拉取别人远程仓库的代码:
第1次:git clone 远程仓库地址
第1次克隆,后面如果这个作者把代码更新了,你不需要重新克隆,你需要使用git pull。
如果你把代码修改了,你能把修改后的代码push到人家仓库吗?
答:默认情况下不可以的,如果你有人家的用户名和密码,就可以。
但是在项目开发,多个程序员,中间是有一个远程仓库,一个远程仓库可以配置多个协作开发。
配置多个协作开发,目的是所有人都可以去push代码到远程仓库。
六、和git相关的几个文件
和git相关的,有如下几个文件:
1).gitkeep
2).gitignore
3)readmd.md
.gitignore:
git忽略文件,在我们进行项目开发时,我们会下载很多第三方的依赖,这些依赖我们不会交给git进行管理。
创建一个这样的文件,没有文件名,只有文件后缀,写入:node_modules/ 表示让git忽略node_modules下面的所有文件或目录。
.gitkeep:
git默认并不会管理空的文件夹,但是有时候,我们的项目,需要先建立一些空的文件夹
进行占位,此时我们就可以在这个文件夹中写一个.gitkeep这个文件
readmd.md:
是仓库的说明文件 md表示markdonw 通常一个仓库都是会使用markdown进行说明
LICENSE:当前仓库中的项目使用协议
七、分支的使用
git分支
当我们创建了一个仓库,会自动生成一个分支,这个分支,叫master分支,也叫主要分支,也叫主分支,也叫根分支。
我们可以在主分支外面,开多个子支分支,分别在不同的分支上书写我们的代码。
每一个分支上面的内容都是独立的。
- 1)创建一个分支
打开有.git目录的文件夹
输入命令:git branch 你的分支名 git branch dev 创建一个dev分支
创建分支时,需要在master分支上有一个版本节点
需要注意的时,你当前的分支中有什么,你开出来的子分支就有什么,每一个分支创建时候,都是所在分支中所有的版本
- 2)查看分支
查看项目中都有哪些分支 git branch
- 3)切换分支
命令:git checkout 分支名 切换到对应的分支
如:git checkout dev 切换到dev分支
- 4)合并分支
把别的分支上的功能合并到自己的分支上面
命令:git merge 你要合并过来的分支名
你要把哪个分支合并过来,你需要先切换到这个分支,如你想把login分支上的内容合并到dev分支上
你需要先切换到dev分支上面的,再输入git merge feature-login
- 5)删除本地的分支
当一个功能开发完毕后,这个分支已经合并到了主分支上面,此时,我们就可以把这个子分支删除掉
你要删除哪一个分支,你需要先离开哪个分支。
命令:git branch -d 你要删除的分支名
如果说要删除的分支上面的有些历史版本,也就是没有合并的版本,或者说有一些临时文件,可能分支删除不掉
- 如果说删除一个分支,删除不掉,可以使用强制删除,比较危险,git branch -D 要删除的分支
分支的全名规范:
不同的公司,它的分支全名规范可能不一样。
1)主分支:master
在master分支上,不会进行任何的开发
master分支是在创建仓库时,就生成的,不需要我自己创建
master分支上面只会接收dev分支上面的合并过来的内容
master分支上,只会存储版本经过测试OK的版本。
2)主开发分支: dev development deve
当项目初始化OK后,就会直接从master分支上开一个dev分支
dev分支上的代码也会上传
dev分支上,接收主功能分支合并过来的代码
存储在开发过程中每一个阶段的版本
3)主功能分支 feature-login feature-admin feature-job
直接从dev分支上开出的新分支,
不同的功能,不同的业务,就在不同的分支上进行开发
开发完毕后,把它合并到dev分支上面的去
4)功能bug解决分支 feature-login-fix
在项目运行过程中,出现了bug,需要修复,可以单独开一个分支,进行修复
bug修复分支都是从功能分支上开出来的
如果这个bug解决了,还需要把这个bug修复分支合并到功能分支上面
最后,再把功能分支合并到dev分支上面
分支的远程操作
当我们建立一个仓库后,默认是有一个master分支,操作时,都是在master分支上进行操作。
当我们的把代码推送到远程仓库,默认也是推送master分支。
当我们写了git push -u origin master时,就是表示把本地仓库历史区中的master分支推送到远程仓库的master分支
把其它分支推送到远程:
1)切换到你要上传内容的分支 如果你想把dev分支上传,那么你就是切换到dev分支。
2)命令:git push origin 分支名 git push origin dev
如果删除远程仓库中的分支:
远程仓库中有一个dev分支,我想删除它。
命令:git push origin --delete dev
介绍一个特殊的分支
一个特殊的分支,这个分支名叫gh-pages
如果你想github临时变成一个线上的服务器。
=>那么我们就可以创建一个gh-pages这个一样分支。
=>在这个分支上,我们通常是上传一个index.html,如果是index.html可以直接访问
=>如果不是index.html,如叫abc.html,那么访问时,就是abc.html
步骤:
=>本地仓库创建一个gh-pages分支,这个分支上有一个版本,代码是index.html
=>把这个分支推送到远程仓库,那么远程仓库也有这个分支了
=>保证远程仓库是在gh-page这个分支,点击settings
=>在settings这个页面中,一下向下找,找到GitHub Pages
=>在这个github pages中它就提供了一个时址,如下:https://chengzhanwei1024.github.io/ceshi002/