Git学习01
在b站根据尚硅谷的Git教学视频整理的笔记,侵删。
仅供个人使用后。
一、Git概述
Git是一个免费、开源的 分布式版本控制系统,可以高效地处理从小型到大型的各种项目。
Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce 和 ClearCase等版本控制工具。
1.1何为版本控制工具
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史纪录,从而让用户能够查看历史版本,方便版本切换。
1.2 为什么需要版本控制
个人开发过渡到团队协作。
1.3 版本控制工具
- 集中式版本控制工具:CVS、SVN、VSS……
- 单一的集中管理服务器,用于保存所有文件的修改版本
- 系统工作的人可以通过客户端连接服务器上传or拉取
- 优点:所有人可以查看其他人正在做什么、管理员轻松管控所有人权限以及管理集中化的版本可控制系统
- 缺点:中央服务器的单点故障,若服务器宕机,则所有人无法工作
- 分布式版本控制工具:Git、Mercurial、Bazaar、Darcs……
- 客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)
- 任何一处协同工具用的文件发生故障,事后都可以通过去哦他客户端的本地仓库进行恢复,因为每个客户端的每次文件提取操作都是一次对整个文件仓库的完整备份
- 优点:服务器断网的情况也可以进行开发(版本控制在本地进行)、每个客户端保存的是整个完整的项目(包含历史记录,更加安全)
1.4 Git简史
Linux版本控制历史
- 1991年: Linus本人手动合并代码
- 2002年:商业软件BitKeeper(BitKeeper的东家BitMover公司处于人道主义精神,授权Linux社区免费使用这个版本控制工具。但要求不能破解。)
- 2005年:开发Samba的Andrew视图破解BitKeeper的协议,被BitMover公司发现,要收回Linux社区的面粉使用权(Linux社区无法像商业公司那样对参与开发者进行强有力的约束);Linus自己用C语言开发了一个分布式版本控制系统:Git,主体程序开发完成只用了两周,一个月后Linux系统代码托管有Git管理
- 2008年:GitHub上线
1.5 Git工作机制
分本地区、暂存区、工作区。
工作区:写代码的地方,即代码存放的磁盘目录的位置
暂存区:为了让git知道代码文件,将工作区的代码添加到暂存区(git add)。临时存储(还未生成版本)
本地库:将暂存区的代码提交到本地库(git commit),生成对应的历史版本
远程库:可以将本地库推送到远程库(git push)
1.6 Git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般称之为远程库。
- 局域网
- GitLab
- 互联网
- Github(外网)
- Gitee码云(国内)
1.7 安装
官网下载 https://www.git-scm.com/
要求目录无中文无空格
无脑下一步即可
二、常用命令
命令名称 | 作用 |
---|---|
git config --globl user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m "日志信息" 文件名 | 提交到本地库 |
git reflog | 查看历史纪录 |
git reset --hard 版本号 | 版本穿梭 |
2.1 设置用户签名
git config --globl user.name 用户名
git config --global user.email 邮箱
C:\Users\用户名\.gitconfig
签名的作用是区分不同操作者身份。用户签名信息在每一个版本的提交信息中都能看到,以此确认本次提交是谁做的。Git首次安装必须设置,否则无法提交代码。且这里的用户签名与github和gitee的账号没有任何关系。
2.2 初始化本地库
基本语法:git init
查看结果:在当前文件夹下生成了一个.git隐藏文件夹
2.3 查看本地库状态
基本语法:git status
2.4 本地问价添加到暂存区
基本语法:git add 文件名
2.5 将暂存区中的文件添加到本地库
基本语法:git commit -m "日志信息" 文件名
查看版本信息:
2.6 修改文件
2.7 历史版本
2.7.1 查看历史版本
基本语法:
git reflog # 查看版本信息
git log # 查看版本详细信息
2.7.2 版本穿梭
本质上移动HEAD指针。
基本语法:git reset --hard 版本号
在.git 路径下HEAD就能看到当前指针指向的分支
在.git/refs/heads/master里面可以看到指针指向的版本号
三、Git的分支操作
3. 1 什么是分支
在版本控制中,同时推进多任务,为每个任务,我们可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的同时,不会影响到主分支的运行(分支底层也是指针的引用)。
3.2 分支的好处
同时并行推进多个功能开发,提高效率。
各个分支在开发过程中,若果有一个分支开发失败,不回对其他分支有任何影响。失败的分支删除重新开始即可。
3.3 分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定分支合并到当前分支上 |
3.3.1 查看分支
基本语法:git branch -v
3.3.2 创建分支
基本语法:git branch 分支名
3.3.3 修改分支
3.3.4 切换分支
基本语法:git checkout 分支名
3.3.5 合并分支
基本语法:git merge 分支名
3.3.6 产生冲突和解决冲突
产生冲突的原因:两个分支同时在同一个文件的同一个位置有两套完全不同的修改,Git无法帮我们决定使用哪个,必须认为决定新代码内容。
手动解决冲突只会修改当前合并的分支,不会修改被合并的分支
3.4 创建分支和切换分支分析
master、hot-fix 其实都是指向具体版本记录的指针。
当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向 master,那么我们现在就在 master 分支上; HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。
四、Git团队协作机制
4.1 团队内协作
4.2 跨团队协作
五、GitHub操作
5.1 创建远程仓库
“+” --> “New repository” --> “输入仓库名” --> “Greate repository”
5.2 远程仓库操作
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与 当前本地分支直接合并 |
5.2.1 创建远程仓库别名
基本语法:
git remote -v # 查看当前所有远程地址别名
git remote add 别名 远程地址
5.2.2 推送本地分支到远程仓库
基本语法:git push 别名 分支
5.2.3 拉取远程库内容
基本语法:git pull 远程库地址别名 远程分支名
5.2.4 克隆远程仓库到本地
基本语法:git clone 远程地址
克隆代码不需要账号(仓库为public)
clone会做如下操作
- 拉取代码
- 初始化本地仓库
- 创建别名(origin)
5.2.5 团队协作
首先要邀请合作的人添加到
Settings --> Manage access --> Invite a collaborator -->选择要邀请的人 --> Add 账号 to this repository --> 将地址复制粘贴发送给该用户(Penging Invite) -->该用户打开地址点击接受邀请
5.3 跨团队协作
- 将远程仓库的地址复制发给邀请跨团队协作的团队/人
- 该团队/人点击Fork将项目叉到自己的本地仓库
- 该团队/人编辑叉取过来的文件
- 编辑完成后提交
- 点击上方发Pull requests,并创建一个新请求
- 原仓库团队会看到有一个Pull requests请求,进入聊天室可以讨论代码相关内容
- 如果代码没有问题,可以点击Merge pull reque合并代码
5.4 SSH免密登录
--进入当前用户的家目录
$ cd
--删除.ssh 目录
$ rm -rvf .ssh removed '.ssh/known_hosts
--运行命令生成.ssh 秘钥目录[注意:这里-C 这个参数是大写的 C]
$ ssh-keygen -t rsa -C atguiguyueyue@aliyun.com
Enter file in which to save the key (/c/用户/用户名/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again: Your identification has been saved in
$ cat id_rsa.pub ssh-rsa
复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys