git基本概念
github基本概念
-
仓库(Repository)
用来存放项目代码,一个项目一个仓库,多个项目多个仓库 -
收藏(Star)
收藏项目,方便下次查看 -
克隆项目(Fork)
就是别人仓库中的代码完整的拷贝一份到自己的仓库中,并显示是从哪里拷贝来的
该fork的项目是独立存在的
-
发起请求(Pull Request)
从别人那fork一个项目,并对该项目进行更改以后,可以发起请求,原项目作者便能看到,如果觉得不错,则将他合并到自己的原仓库中。
-
关注(Watch)
关注以后,该项目由任何的更新,会向你发送该通知提醒 -
事物卡片(Issue)
当发现他人代码bug,可以给他们提出一个issue,项目作者便可以看到并一个个进行修复
git介绍
git是目前世界上最先进的分布式版本控制系统
git与github
两者区别
git是一个分布式版本控制系统,简单的说其实就是一个软件,用于记录一个或若干个文件内容变化,以便将来查询特定版本修订情况的软件。
**
**是一个为用户提供git服务的网站,简单的说可以方代码的地方(不过可以放的当然不仅是代码),github出了提供管理git的web界面外,还提供了订阅,关注,讨论组,在心白鸡等丰富的功能,github被称之为全球最大的基友网站
git工作流程
- git本地操作的三个区域
- 工作流程
git使用
注册github
本地仓库操作
什么是仓库?仓库又名版本库,我们可以理解成是一个目录,用于存放代码,这个目录里面的所有文件都可以被git管理起来,每个文件的修改,删除等操作都被git跟踪到
1)安装好后首次使用需要进行全局配置
查看配置是否成功
$ git config --global user.name
$ git config --global user.email
2)创建仓库
当我们需要染ggit去管理某个新项目/已存在的项目的时候,就需要创建仓库。
注意:尽量避免使用包含中文的目录名
步骤
- 切换目录
指令:$ cd D:\GitRepository - 创建空目录
指令:$ mkdir pro_git - 在命令行中进入项目目录
指令:$ cd pro_git - git仓库初始化(让git知道,他需要来管理这个目录)
指令:$ git init
会发现文件夹中多了一个.git的隐藏目录,这个目录时git所创建的,不能删除,也不能随意更改其中的内容
3)git常用指定操作
查看当前状态:git status
添加到缓存区:git add 文件名
说明:git add指令,可以添加一个文件,也可以添加多个文件
语法1:git add 文件名
语法2: git add 文件名1 文件名2 文件名3…
语法2:git add . [添加当前目录到缓存区中]
示例:
提交到版本刻苦: git commit -m “注释内容”
说明:注释可以写中文
版本回退
版本回退分为两个步骤
1)查看版本,确定要回退的时间点
指令1: git log
指令2: git log --pretty=online(推荐使用)
2)回退操作
指令: git reset --hard 提交编号
案例:
问题:回到过去之后,要想再回到之前最新的版本的时候,则需要使用指令去查看历史操作,以得到最新的commit id
指令: git reflog可以查看未来的commid id
小结:
- 要想回到过去,我们必须先要得到 commit id,然后通过git reset-- hard 进行回退
- 想要回到未来,需要使用git reflog 进行历史操作查看,德奥最新的 commit it
- 在写回退指令的时候commit id 可以不用写全,git自动识别,但是也不能写太少,至少需要写前4位字符
远程仓库
在github中创建一个仓库
注意:仓库名要求在当前账号下唯一
两种常规的使用方式
基于http协议
步骤:
1)创建空目录,名称为shop
2)使用clone指令克隆线上仓库到本地
语法: git clone 线上仓库地址
线上仓库地址
示例:
3)在仓库上做对应的操作(提交暂存区,提交到本地仓库,提交到线上仓库,拉取到线上仓库)
- 提交到线上仓库的指令:git push
可能会遇到的错误(但是我自己在操作的会后并没有遇到,直接弹出了一个github登录的框框,输入了用户名密码就成功了)
在首次往线上仓库提交内容的时候,出现了403的错误,原因是不是任何人都可以往线上仓库提交内容的,必须要鉴权
解决方法:
在.git文件夹下的config文件,对其进行修改
原本的url
url = https://github.com/1629210061/shop.git
修改如下:
url = https://用户名:密码@github.com/1629210061/shop.git - 拉取线上版本:git pull
成功拉取拉取新加入的文件
基于ssh协议
该方式与前面https方式相比,只是影响github对于用户的身份鉴权方式,对于git的具体操作(如提交本地,提交远程等)没有任何影响
生成公私钥指令(需要自行安装OpenSSh):ssh-keygen -t rsa -C “注册邮箱”
步骤:
1)生成客户端公私钥文件
2)将公钥上传到github
3)执行后续先前的操作,指令同上
git的分支操作
在版本回退的章节里,每次提交后都会有记录,Git 把它们串成时间线,形成类似于时
间轴的东西,这个时间轴就是一个分支,我们称之为master分支。.
在开发的时候往往是团队协作,多人进行开发,因此光有一个分支是无法满足多人同时
开发的需求的,并且在分支上工作并不影响其他分支的正常使用,会更加安全,Git 鼓励开
发者使用分支去完成一些开发任务。
分支的相关指令
- 查看分支:gti branch
在当前分支前面会有一个*标记
- 创建分支:git branch 分支名
- 切换分支:git checkout 分支名
- 创建并切换分支:git checkout -b 分支名
- 删除分支:git branch -d 分支名
注意:要先退出准备删除的分支,才能进行该操作
- 合并分支:git merge 被合并的分支名
在dev分支修改readme文件
切换到master,发现readme文件没有法伤改变,说明分支之间互不影响
合并分支,在要合并的分支上执行该操作
提交到远程仓库中
冲突的产生与解决
问题发生的情景:a,b拉取了远程仓库中的版本,a进行修改后上传到了远程仓库,b进行修改项目,b要上传到远程仓库的时候就会发生版本冲突。
-
情况一:a,b 修改了同一份文件的代码
-
解决思路:错误消息提示你先执行git pull 命令
此时的readme文件,然后和小红进行商讨代码的保留问题,去除掉那些无用信息,重新提交
-
情况二:a,b没有修改同一个文件的代码
只需要重新git pull,然后重新进行提交即可
忽略文件
场景:在项目目录下哟荤多万年不变的文件目录,例如css,js,images等,或者还有一些目录即便有改动,我们也不想让其提交到远程仓库的文档,此时我们可以使用“忽略文件”机制来实现需求
忽略文件需要创建一个名为.gitignore的文件,该文件用于声明忽略文件或不忽略文件的规则,规则对当前目录及子目录生效。
注意:该文件因为没有文件名,没办法直接在windews目永下直接创建。可以通过命令行Git Bash来touch创建。
案例:
1)新建js文件上传到远程仓库
2)创建.gitignore文件,并写过滤js文件
3)在js中新增文件,并重新提交到远程残酷
会发现js文件夹并未更新,操作成功