admin管理员组文章数量:1616703
git和github学习之旅
- 0.前言
- 1.基本概念
- 1.1几个名词
- 1.2GitHub功能
- 1.3Git的优势
- 2.了解Git
- 2.1Git下载安装
- 2.2Git结构
- 2.3Git和代码托管中心
- 3.Git命令行操作
- 3.1本地库初始化
- 3.2设置签名
- 3.3基本操作
- 3.3.1状态查看操作
- 3.3.2添加操作
- 3.3.3提交操作
- 3.3.4查看历史记录
- 3.3.5前进后退
- 3.3.6 reset命令的三个参数对比
- 3.3.7删除文件并找回
- 3.3.8比较文件差异
- 3.4分支管理
- 3.4.1什么是分支
- 3.4.2分支的好处
- 3.4.3分支操作
- 4.GitHub
- 4.1账号信息
- 4.2远程交互
- 4.3交互实现过程
- 4.3.1创建本地库
- 4.3.2创建远程库
- 4.3.3在本地创建远程库地址别名
- 4.3.4推送操作
- 4.3.5克隆操作
- 4.3.6邀请团队成员
- 4.3.7远程库修改的拉取
- 4.3.8协同开发的冲突解决
- 4.3.9跨团队协作
- 5.后记
0.前言
印象中,github是一个很有用的工具,但是由于都是英文,真的让人头大,一直都没有仔细去学习如何使用。最近在学习前端,看到了几篇关于github的博客,心血来潮地想去学习一下,于是去哔哩哔哩上找了教程,下面是听课过程中的笔记。
1.基本概念
一定一定要明确,使用github是一种版本控制工具,其目的是托管项目代码。
1.1几个名词
- 仓库(Repository):用来存放项目代码,每个项目对应一个仓库,多个开源项目对应多个仓库。
- 收藏(Star):收藏项目,方便下次查看。
- 复制克隆项目(Fork):将他人的项目完整的复制克隆到自己的仓库。注意:克隆出来的是一个独立的仓库。
- 关注(Watch):关注项目,当项目有更新时会有提醒。
1.2GitHub功能
- 协同修改:多人并行不悖地修改服务器端的同一个文件。
- 数据备份:不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
- 版本管理:在保存每一个版本的文件信息的时候做到不保存重复数据。Git带去了文件系统快照方式实现这个功能。
- 权限控制:对团队中参与开发的人员进行权限控制,对团队外开发者贡献的代码进行审核。
- 历史记录:查看修改人、修改时间、修改内容、日志信息;将本地文件恢复到某一个历史状态。
- 分支管理:允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。
1.3Git的优势
- 大部分操作在本地完成,不需要联网
- 完整性保证(使用hash)
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与Linux命令全面兼容
2.了解Git
2.1Git下载安装
这个安装比较简单,网上也有很多安装教程,这里就不赘述了。
也可以参考哔哩哔哩视频
然后在任意的文件夹里右键,都可以看到这两个选项。通过这两个选项就可以打开git的图形化界面或者命令行界面,从而进行一些操作。
2.2Git结构
- 工作区:写代码
- 暂存区:临时存储
- 本地库:历史版本
暂存区存在的意义在于:当提交到暂存区的文件不想提交了,还可以撤回。
2.3Git和代码托管中心
前面说过了,GitHub其实是一个代码托管中心。Git是本地库,GitHub就是远程库。
本地库和远程库之间可以进行交互,这种关系可以看一下这个视频,真的形象、简单、易懂。而且里面对于push、clone、pull、merge等概念也进行了讲述。
3.Git命令行操作
3.1本地库初始化
- 命令:git init
- 效果:实际上就是创建出了.git这个文件夹。
- 注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。
3.2设置签名
- 形式:
用户名:XXX
Email地址:XXX@XXX(这里随便写,不会向这个邮箱发送邮件的) - 作用:区分不同开发人员的身份
- 辨析:这里设置的签名和GitHub上的账号密码没有任何关系
- 命令:
(1)项目级别/仓库级别:仅在当前本地库范围内有效。(上面实例中就是指appreciation这个项目)。
git config user.name your_username
git config user.email your_email
信息保存位置:./.git/config文件
(2)系统用户级别:登录当前操作系统的用户范围。(上述实例中就是指Lenovo用户)。
git config --global user.name your_username
git config --global user.email your_email
信息保存位置:~/.gitconfig文件(即根目录下的隐藏文件中)
(3)两者优先级:
①就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。
②如果只有系统用户级别的签名,就以系统用户级别的签名为准
③不允许两者都没有
3.3基本操作
3.3.1状态查看操作
- 命令:
git status
- 效果:查看工作区、缓存区状态
3.3.2添加操作
- 命令:
git add [file name]
- 效果:将工作区的“新建/修改”添加到缓存区
3.3.3提交操作
- 命令:
/*对某一个文件进行提交*/
git commit -m "commit message" [file name]
/*对缓存区的所有文件进行提交*/
git commit -m "commit message"
- 将暂存区的内容提交到本地库
3.3.4查看历史记录
(1)详细显示:
命令:
git log
效果:
附注:多屏显示控制方式:①空格向下翻页;②b向上翻页;③q退出
(2)单行显示
命令:
git log --pretty=oneline
效果:
(3)单行显示(更简洁)
命令:
git log --oneline
效果:只显示HEAD指针以前的版本号。
(4)显示后退到某一版本的步数
命令:
git reflog
效果:
附注:HEAD@{移动到当前版本需要多少步}
3.3.5前进后退
(1)本质:使用HEAD指针来进行版本控制。
(2)方式一:基于索引值操作【推荐】
命令:
git reset --hard [索引值]
好处:
不必考虑是前进还是后退,因为每个版本的索引值都不同,直接用索引值即可定位到想要的某个版本。
(3)方式二:使用^符号(只能后退)
命令:
/*注:^的个数代表后退步数 */
git reset --hard HEAD^ /*后退一步*/
git reset --hard HEAD^^ /*后退两步*/
git reset --hard HEAD^^^ /*后退三步*/
…………
(4)方式三:使用~符号(只能后退)
命令:
git reset --hard HEAD~n /*后退n步*/
3.3.6 reset命令的三个参数对比
(1)–soft参数:
- 仅仅在本地库移动HEAD指针
(2)–mixed参数 - 在本地库移动HEAD指针
- 重置暂存区
(3)–hard参数 - 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
3.3.7删除文件并找回
(1)前提:删除前,文件存在时的状态提交到了本地库
(2)操作:git reset --hard[指针位置]
- 删除操作已经提交到本地库:指针位置指向历史记录中未删除该文件时的索引值。
- 删除操作尚未提交到本地库:指针位置使用HEAD(当前位置)即可。
3.3.8比较文件差异
(1)git diff [文件名]
作用:将工作区的文件和暂存区的文件进行比较
(2)git diff [本地库中历史版本] [文件名]
作用:将工作区中的文件和本地库历史记录比较
(3)git diff
作用:比较多个文件。
3.4分支管理
3.4.1什么是分支
在版本控制过程中,使用多条线同时推进多个任务。
3.4.2分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,删除失败的分支并重新开始即可。
3.4.3分支操作
(1)创建分支
git branch [分支名]
(2)查看分支
git branch -v
(3)切换分支
git checkout [分支名]
(4)合并分支
/*第一步:切换到接受修改的分支(一般是主干)上*/
git checkout [接受合并的分支名/master]
/*第二步:执行merge命令*/
git merge [请求合并的分支名]
(5)解决冲突
-
冲突的表现
会在产生冲突的文件里多一些特殊符号,提醒冲突的内容。
例如:
①在master和hot_fix里都有test.txt文件,现在两个分支都对该文件的同一行进行修改,如下图:
②在两个分支里都将这个文件提交到本地库。
③在master中使用git merge [hot_fix]
命令进行合并,则会提示发生冲突,无法自动合并,如下图:
④打开冲突文件,会发现多了一些特殊符号提示当前冲突所在。如下图:
-
冲突的解决
按照以下步骤进行解决即可:
①编辑文件,删除特殊符号。
②把文件修改到满意的程度,保存退出
③git add [文件名]
④git commit -m “日志信息”
注意:第四步中一定不能带文件名!
4.GitHub
4.1账号信息
进入官网,网址为https://github/。
注册账户比较简单,虽然这个网站是全英文的,但是注册这部分凭靠浅薄的英文水平还是可以胜任的hhhh。实在有问题也可以参考这篇博客。
4.2远程交互
(1)团队内部协作:如下图所示,这里是从哔哩哔哩视频上截取下来的图片,通过这个图片可以清楚的知道团队内部协作的过程。
(2)跨团队协作:如下图所示,这里也是从哔哩哔哩视频上截取下来的图片,通过这个图片可以清楚的知道跨团队协作的过程。
4.3交互实现过程
4.3.1创建本地库
按照上述内容,对本地库进行初始化、对项目进行签名设置,然后添加文件、提交文件,即将项目中的文件提交到本地库。
4.3.2创建远程库
这个比较简单,填写完基本信息之后点击commit即可。
4.3.3在本地创建远程库地址别名
这一步只是为了简化操作,也可以不做的。
按照上图,在新建仓库的主页获取网址,然后在本地的git命令行中输入一下两条指令:
git remote add [别名] [刚刚获取的网址]
git remote -v
4.3.4推送操作
命令:
git push [别名] [分支名]
效果:会弹出一个GitHub的登录界面,填写账号密码即可。
我的这个地方报下述错误。。。
看了这篇博客之后,对命令进行了修改,成功推送~
4.3.5克隆操作
命令:
git clone [远程地址]
实现的效果:
- 完整的把远程库下载到本地
- 创建appreciation远程地址别名
- 初始化本地库
4.3.6邀请团队成员
在GitHub仓库主页上,按照下图中的过程依次进行即可。
然后会弹出下面这个弹窗:
被邀请者会收到邮件提示,登录GitHub之后点击同意即可加入团队。
4.3.7远程库修改的拉取
pull实际上是fetch和merge两个操作,即pull=fetch+merge
命令:
/*抓取远程库的某个分支*/
git pull [远程地址别名] [远程分支名]
/*抓取远程库的某个分支*/
git fetch [远程地址别名] [远程分支名]
git merge [远程地址别名/远程分支名]
两者选择:当进行的修改比较简单,不太会产生冲突时,使用pull即可,比较简单;但是如果要保险起见,可以先fetch查看,没有问题之后再merge。
4.3.8协同开发的冲突解决
(1)要点:
- 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取。
- 拉取下来之后如果进入冲突状态,则按照“分支冲突解决”(该文章的3.4.3的(5))操作解决即可。
4.3.9跨团队协作
(1)Fork:以东方不败的身份登录GitHub,然后找到岳不群的项目,点击fork。
(2)clone:东方不败将项目clone到本地进行修改操作。
(3)push:东方不败将项目push到自己的远程库。
(4)pull request:
后面有些复杂,不太能表述清楚☹☹,
建议看视频,网址为:https://b23.tv/AebrPq
5.后记
这些还是比较基础的,推荐哔哩哔哩的尚硅谷博主,视频讲的真的挺好。
但是最主要的还是要自己多练习。
加油吧!
版权声明:本文标题:git和github学习之旅 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728742329a1171201.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论