Git操作
Git概述(略)
Git:分布式版本控制工具 vs 集中式版本控制工具
Git命令:xxx
Git分支:主打特性。创建、转换、合并。
GitLab:基于局域网的代码托管中心。
官网介绍
https://git-scm.com/
版本控制介绍
版本控制:记录文件的内容变化。以便能够查看文件的历史修改记录
*集中式和分布式的区别
集中式:都有一个集中管理的服务器。
缺点:服务器的单点故障问题。宕掉了、挂机了、停电了或者磁盘坏掉了,那代码就没有了。
分布式:
每台程序员自己的电脑就是一个版本控制库。
优点:
-
版本控制在本地进行。即使断网依然不影响版本提交等。
-
每个人手上都有一套完整的包含历史记录的代码。
历史
Git和linux是同一个人开发的
工作机制和代码托管
工作区:代码存放的磁盘目录
暂存区:
-
让git知道你有这么一个代码文件。你需要将工作区的代码添加到暂存区,git add .
-
此时并没有历史版本
-
从暂存区删除:git rm --cached
本地库:
把暂存区提交到本地库,才会有历史版本。
这里扩展一下git文件的状态:
Git的各种状态 - InMicro - 博客园
你从git status看到的就是这3种。
远程库
gitlab:
搭建gitlab服务器,基于局域网的
安装
安装目录:非中文,不包含空格
vim编辑器,linux命令,很多好用快捷键
Git常用命令
设置用户签名
git config --global user.name xxx
git config --global user.email xxx
git首次安装必须设置用户签名,否则无法提交代码
git init
使得git获取这个目录的管理权
git init初始化本地库后,当前目录下会有隐藏目录/.git
相关linux命令
需使用 ll -a 查看到隐藏目录
*git bash中的命令和linux命令是通用的
git status
显示结果:
第1行:提示当前分支
……
红色:只是存在于工作区,还没有被git管理,没有追踪过这个文件
绿色:git已经知道了这个文件,已经追踪到了这个文件
相关linux命令
非插入模式
复制:yy
粘贴:p
查看文件内容
cat a.vue
查看文件末尾第一行,即最后一行
tail -n 1 a.vue
git add - 添加
添加暂存区
移除暂存区
git rm --cached xxx
git commit - 提交
git commit -m 'xxx'
提交后展示:
7位字符码:版本号
git relog
可以看到提交的版本历史
这里是前7位精简版本号
git log
查看详细日志:用户签名 提交时间 等等
这里可以看到完整版本号
文件修改
只要有修改,都可以用git status查看文件修改状态
提示文件修改了:红色的,表示这次文件的修改还没有添加到暂存区
底层:是用指针来实现的
git reset --hard
同样的,查看版本信息
git reflog 查看精简版本信息
git log 查看版本详细信息
版本穿梭:
git reset --hard 版本号
底部实现原理
实际上head不动,移动master
Git分支操作
公司里服务器运行的模式
服务器:公司里面分好几套服务器,因为有好几套环境:开发、测试、生产。
有好几套分支:一套分支给用户用着。比如我们是在开发(dev)分支上开发,用户是在生产分支(master)上使用。
git branch - 创建
创建一个新分支,拉一个新分支,相当于webstorm -》new branch ...
git branch xxx
查看当前所有分支
git branch -v
git checkout - 切换
切换分支
git checkout feature/xxx
git merge - 合并
把指定分支合并到当前分支
我的master分支并没有修改,hotfix分支基于master分支之上又改了一些东西。
那么合并过来就改了呀。。
有冲突的情况
<<<head
当前分支的代码
=========
要合并的代码
>>>hotfix
三路合并的原理
简单点来讲就是这样,先找到2个commit的公共祖先,然后分别比较相对于公共组件的差异,然后合并两份差异。
https://segmentfault.com/a/1190000003966242
指针
远程git操作
git remote
查看本地所有别名
git remte -v
给远程分支取别名
git remote add xxx https://xxx
现在git要加上token才能push
git remote set-url origin https://<token>@github.com/betterangela/git-demo.git
git push - 推送
git push 推送
//推送的最小单位是:分支
git push xxx/https://xxx master
git push -u origin master // 加上-u参数,之后就可以直接使用git push
作为成员:git clone -> git push
管理员:git push -> git pull
fork:把你的代码复制一份复制到我的远程库里面
删除后了目录push
git rm --cached -r .idea // 删除目录要加上-r
git commit -m 'deleted .idea' // 删除之后一定要commit
git push origin master
git:项目提交了idea的文件-让文件/文件夹脱离版本控制_MasterIsHero的博客-CSDN博客_idea将文件移除git控制
git pull - 拉取
拉取远程分支
git pull 远程库别名 远程库分支
git pull origin master
*拉取动作会自动帮你提交本地库
本地库和远程库同步,这个动作很重要;
目的:随时让你本地库代码保持最新的状态
git clone - 克隆
git clone https://xxx
ps.克隆的时候是不需要账号登录的。公共库的读权限是没有限制的。
clone的时候会做下面3件事情:
-
拉取代码
-
初始化本地库
-
添加远程别名
当你clone的时候这3件事它都帮你做好了
git push:账号认证到本地
permission denied xxx
SSH免密登录
生成SSH公钥
-
首先在家目录下,敲入命令
cd C:\Users\v_lkeqiliu
// ssh-keygen 生成免密登录协议的
// -t rsa 非对称加密协议,-t指定加密协议
// -C 描述,后跟账号邮箱
ssh-keygen -t rsa -C 1456100683@qq.com
2.敲3次回车
3.在家目录下会生成/.ssh目录,下面有公钥和私钥
4.将公钥粘贴至自己的gihub账户中