Git学习总结:
1、Git常用命令
2、git log分析与检索
3、git分支管理
4、分支开发主干发布模式
版本管理系统:
来源:如果没有版本管系统,则多个人操作同一份文件就比较杂乱,不清楚自己改了那些东西,别人改了哪些东西
需求:需要在多个人操作同一个项目的时候有一个数据表,用来记录什么时间谁提交了什么内容,并且可以随时回到之前修改的地方,方便版本管理和控制
分布式和集中式的区别:
集中式:有一台中央服务器,每台电脑都有自己的版本管理工具,将各个电脑的版本管理推到服务器上,服务器记录每台电脑的版本记录工作
问题:1、推送必须网络才能到达服务器
2、随着用户提交的增多,服务器压力越来越大,需要排队等等
3、服务器挂了,就没有补救的方法,很不安全
分布式:去掉了中央服务器,每台电脑都是自己的服务器
问题:1、只能在局域网之内工作,在家的无法拿到局域网内的版本管理系统的(如何拿到?)
githab:人和人、局域网和局域网之间进行交互,如何解决上面的问题。可以租个服务器,把整个版本管理推到服务器上(相当于一个网络硬盘),即使在家也可以访问版本管理,githab出现了,它用来进行版本管理。把文件推到githab服务器,任何人都可以进行拉去、推送的操作
优点:不需要联网,只要在局域网范围内,都可以推给同事A、B
无论有多少台电脑,都不会阻碍到电脑的速度
*保存非常完美,如果同事A的电脑坏了,同事B有自己的备份,DEF等互相备份的,非常安全的操作
工作模式:在局域网之内修改传递、修改传递,
安装:Windows安装直接在官网下载安装包
1、配置用户名和邮箱
原因:git是在局域网之内工作(清晰团队中的各个成员)
--global指的是全局配置 在任何目录查看用户名和密码都全局配置的值
git config --global user.name XXX
git config --global user.email XXX
查看配置git config -l /--list
2、创建仓库
a、在文件根目录下:git init
b、增加一个文件:read.txt
c、提交到临时仓库:git add read.txt
d、提交到仓库:git commit -m ”add 123“
备注:以上操作表明一个版本管理的雏形已经完成
e、在read.txt增加一个修改
f、查看结果:git status
或者查看修改了什么内容:git diff
g、提交到临时仓库:git add read.txt
git status
3、我们做了什么:
工作区:修改工作内容
stage临时仓库:git add 可以增加很多文件,可以在这个过程中任意的增删改查,是比较保险的操作。
master仓库:git commit 一次性提交到master分支
stage和master被称之为版本库或者管理系统
4、最大的优势:---撤销修改状态
假如修改的问题不对:
针对工作区撤销:
查看状态:git status
撤销修改(工作区):git checkout -- read.txt 将工作区的修改还原到上一次(add、commit)的修改
针对临时仓库撤销:
查看状态:git status
撤销修改:git reset HEAD read.txt 撤销了临时区
撤销修改:git checkout -- read.txt 撤销工作区
针对master仓库撤销:HEAD指向哪里,就代表现在在哪个存档位置
git commit:相当于游戏存档,有N个存档
查看提交的日志(存档):git log
撤销修改:git reset --hard HEAD^ ^代表上一个存档,^^代表上上个存档
查看状态:git stauts 提示没有需要提交的(直接将临时区和工作区内容全部删除)
githab服务器(临时的网络硬盘):分布式版本控制服务器,可以解决只能在局域网工作的问题
问题:使用了githab服务器是否就和集中式一样了?
分布式的add、commit都是在本地进行的一系列操作,集中式的add、commit都是在服务器进行操作,不能在本地
1、配置秘钥:使用cd ~/.ssh查看是否存在id_rsa和id_rsa.pub,如果没有则需要命令ssh-keygen -t rsa -C "youremail"
秘钥在pub文件下
进入GitHub --- settings --- SSH and GPG keys --- New SSH Key --- 将本地秘钥add进去 【完成配置操作】
2、git push:把本地仓库传递到远程仓库上
(1)、添加远程仓库的地址:git remote add origin git@github.com:XXX
(2)、将本地仓库传到远端:git push -u origin master
例如:在githab上创建一个自己的仓库,your repositories -- new --- name:myTest 【创建了一个新的仓库】
在本地初始化仓库的路径下使用git remote add origin git@github.com:myTest.git 【增加仓库地址】
git push -u origin master 第一次推送使用-u把远程的origion分支和本地的master分支关联起来 【完成网络存档的步骤,方便以后可以随时随地下载】
Git分支管理:
原理:master代表commit次数的主分支,HEAD指向表示正处于master分支上;可以先抛弃master分支,创建一个Dev分支,并使得HEAD指向Dev分支,如果在Dev分支进行一次add、commit,即代表增加一次存档,目前则Dev分支已经领先于master分支,最终Dev分支要合并到master分支
问题:为什么要存在Dev分支?
不能一直使用master分支,会对该分支造成污染,如果commit很多错误,然后一一删除太麻烦,则使用Dev分支(可以进行一系列操作),最终合并到master分支,删除Dev分支。master分支代表很稳定的版本
分支管理指令:git branch dev
切换到dev分支:git checkout dev/master 【将HEAD从master分支指向dev分支】
查看分支状态:git branch
在新分支上做修改并且add、commit;然后切换master分支并查看分支状态
分支合并:将dev上提交的内容合并到master分支git merge dev 注意:处于master分支上才能merge
删除dev分支:git branch -d dev
查看分支状态:git branch
IED自动git插件
1、File --- setting --- Version Control --- GitHab --- 点击+号 --- 输入账号和密码 【git和IDE进行关联】
2、File --- setting --- Version Control --- git ---- (git的执行地址)配置git的地址
3、githab --- your repositories -- new --- name:zjtest 【创建一个空的仓库,注意:记创建的githab地址】
4、创建本地仓库: VSC --- import into Version Control --- Creat Git repositories --- 选择当前的项目
注意:当前目录变红,表示处于工作区【相当于git init】
5、配置githab:右键项目 --- Git --- Repository --- Remotes --- +号 --- 增加项目的githab地址
以上操作将githab和本地项目做了关联
6、把本地文件推送到githab上面,右上角对勾 --- 勾选需要提交的文件(idea文件先不提交) --- 点击commit
点击控制台的log查看:master分支已经commit一个版本
***7、把本地的master分支推送到githab服务器上:右键项目 --- Git --- Repository --- push 【本地的存档push到githab服务器上】
8、在gtihab上创建一个文件(如何拉去githab上的文件) 蓝色向下的箭头 --- OK
9、增加了一段错误的代码 --- 选择上一个存档 --- 右键 --- Reset Current Branch to Here --- Hard --- reset 【commit之后git reset的操作】
10、本地增加一行代码 --- 右上角对勾 --- (首次push之后) --- commit/commit and push 【既在本地存档,又在远程存档】HEAD指向master和origin
11、创建新分支:点击 右下角Git:master --- new branch --- 自定义名称dev --- OK 、
12、在dev中增加代码 --- commit --- 切换master分支 --- 右键checkout --- 点击dev存档记录 --- 右键 --- Branch dev --- Merge into Current 【HEAD中既包含了master也包含了dev】
13、右键点击右下角Git:dev --- Delete
14、将代码push到远端(参考第七步) Head指向origin和master --- 刷新浏览器,可以看到四次提交 【在本地dev开发并合并到master上】
15、点击控制台:查看发生了什么
16:控制台:Terminal ,可以直接使用git命令
为什么不提交idea:项目属于idea项目,如果将自己的idea配置信息提交到githab上,其他人无法进行操作