写在前面的几点声明:
1.内容来自网上的【尚硅谷】 Git&GitHub 最全教程,从入门到精通课程
2.实战部分因为时间问题没具体跟进,只是看的教程内容,理解过程
Git学习笔记
Git对于SVN来说是分布式的版本控制软件,关于版本控制:版本控制是在已经有的代码模块版本中的代码更改和维护,需要记录历史的状态,在历史状态上进行进一步的更改。同时在多个人共同的开发一个类或者同一个文档的过程中,文本或者类是存储在两者共同可见的存储空间中,团队协作中的文件控制。版本控制一般分成是集中式(容易单点故障)和分布式的两类。
版本控制的更多功能:
- 协同修改
- 数据备份
- 版本管理
- 权限控制
- 历史纪录
- 分支管理:允许多条生产线同时工作
Git的优势:
大多数的的操作可以在本地实现的,不需要远程的,本地保存了所有的完整性,在仓库中保存的是整个新版本,旧版本是自动的保存的。Linux命令的全面兼容。
git的本地结构:
本地结构是理解整个工作过程的重要内容,
工作区域:写代码
暂存区域:临时存储(可以存仓库也可以放弃)
本地库:历史版本
三者的关系大致:
git add添加到暂存区域,git commit存入到本地库
托管中心:维护远程的库
局域网的Gitlab
外网的:github,gitee等
一些git的实战命令:
本地仓库的初始化:
win下右键可以使用git bash 进入到指定的路径下面,然后执行git init
,会在本地生成一个空的仓库,通过一个.git目录下的所有文件来维持整个仓库的初始状态:
git的命令级别:
项目级别和系统级别,项目级别的只存在于项目中,系统的级别在项目级别之上。
两个命令的基本参数是:
git config +
git config --global +
其实这个些配置文件最终都会在.git/config之中,本地在项目目录下,系统级别的在家目录下。
比如设置user.name和user.email之后的config文件:
查看项目的状态:
git status
新建文件并放入到暂存区中:
touch good.txt
git add filename
使用git rm --cache file
从暂存区中撤销这个文件缓存
暂存区提交到本地仓库:
git commit file
注意到暂存区中的文件才是会被追踪的,已经在暂存区中的文件的修改是会被追踪的,是否提交到本地仓库。
不单独打开编辑器直接写入相应的提交信息:
git commit -m " fsdaf" file
几个命令总结:
git status
git add file
git commit -m “message” file
版本的前进和回退
首先是查看提交的记录:
git log查看所有的提交信息
git log --pretty=oneline
git log --oneline
git reflog显示版本距离
其中的HEAD其实是当前的版本,这是两次提交之后的git log
显示变化:
git reflog
:查看各个版本同时查看版本和目前head的距离,对于版本的回退或者前进有很大帮助
前进或者回退版本命令:
其实是对HEAD指针机型操作:
-
基于索引值进行操作:
git reset --hard [索引值]
其中的索引值可以通过git reflog
获得
可以看出来上面的good.txt文件中的内容已经放生了改变,回退到第二次提交的时候。
此时head的指向发生了变化:
2. 退回几个版本:
指定回退一个版本:
git reset --hrad HEAD^
回退两个版本:
git reset --hard HEAD^^
回退N个版本:
git reset --hard HEAD~n
hard,soft,mix参数的不同:
hard是工作区,本地库,暂存区都发生改变
soft是仅仅是移动本地库的HEAD指针
mixed是本地库和暂存区进行了改变,工作区不发生改变
删除文件的恢复操作:
一般来说是针对已经提交上去的文件的更改,首先是在工作区对文件的删除
rm test.txt
之后查看状态:
可以看出test是删除的状态了,这个操作应该添加到暂存区,之后在提交到本地库
将本地的操作落实到本地库上
查看文件的差异:
git diff test.txt
一般来说,这个是和暂存区的文件进行对比的
也可以指定比较的版本:
git diff HEAD^ test.txt
分支概述:
版本控制中使用多个分支进行不同工作的推进,齐头并进互不干扰
热修复:在不下线的前提下进行修复和开发
分支操作:
git branch -v 查看分支
git branch hot_fix 创建分支
git checkout hot_fix 切换分支
从接受修改的分支上来进行合并 git merge
hot_fix实现在master上分支的合并
HASH:
hash一种加密算法,把明文转化成密文,并且算法的输出是相同长度的,常用在检验等操作中
与远程仓库的操作:
本地仓库为远程仓库添加别名,每一个远程仓库都有一个http和ssh地址
git remote -v
查看所有的远程的仓库别名
git remote add [name] [url]
其别名的命令
git push [name] maste
r 推送操作
git clone [url] clone
远程仓库,完整的把仓库复制下来,初始化别名,初始化本地库
为团队添加成员:
在项目的设置seeting中Collaborators中添加github账户邮箱即可,然后被邀请的人接受邀请,在开发过程中就可以直接推送到项目中。
和远程库同步:
git pull [name] [branch]
git fetch [name] [branch]
git merge [name]/[branch]
团队中的其他人在项目发生改变的时候可以通过pull操作是自己的本地的内容和远程的相同,pull其实是fetch和merge两者的结合
团队协作的冲突解决:
首先每个人对项目的修改必须基于最新的版本才能进一步的开发,首先需要git pull 远程仓库的内容,从git pull下来的项目需要和本地进行冲突的解决,冲突的解决都是人工决定的。
跨团队协作:
团队外的人进行fork操作,拥有和团队内相同的远程仓库,
之后clone项目到本地库,在本地进行修改和操作,之后推送到自己远程仓库中
在团队外的人员修改好远程仓库之后,需要提出pull request操作,将自己的更改操作发送给团队内的人员。
团队内的人员对提交进行审核和合并,最终merge request
最终把远程仓库中的内容pull到本地。
Git工作流:
分类:
集中式工作流:不分支,都和mater保持,类似于SVN集中式
GitFlow工作流:充分使用分支
Forking工作流:一般是跨团队协作
GITFLOW为主的开发模式: