工作区、暂存区、版本区的概念
在整个GIT之中,对于文件的保存一共提供有三个区域
:
【工作区】:用户编写的代码文件夹,所有的文件操作都以工作区为主。
GIT仓库:
【暂存库】:只是将工作区中的未保存文件保存到暂存区中,此部分由GIT维护。
【版本库】:是真正进行项目的发布的代码。
-
首先用户要在工作区中编写程序文件,但是此时的文件并不能真正的保存在GIT仓库之中,并且在这一个区域中所进行的文件的创建、修改、删除操作,都不会影响最终的软件版本发布。如果现在需要将这个临时区域的内容发布到最终的软件版本里面需要先增加到暂存区。此时表示代码可以撤销,使用git add. 进行增加。
-
使用git add之后工作区中文件的状态进行了删除,而后将所有新文件保存在暂存区里面。
-
保存在暂存区里的内容只能说是暂时需要的;暂存区的内容可能会被删除,而后真正要发布的项目必须将其设置在Master分支上(版本库),这样只有进行提交后才可以将暂存区的内容保存在版本库中,才能够真正被其他人所使用。
- 由于一个项目可能被发布多次,所以在git里面进行保存之后,都会自动的生成一个提交的版本编号(Commit ID),
用于为开发者提供版本回退的处理机制。
实际上保存到暂存区的内容只是给了用户一个临时保存暂时不改代码的空间,如果发现错误了,就可以进行恢复。
如果现在继续修改文件,此时的修改是在工作区里面,与暂存区没有关系,没有使用git add命令。
- 如果此时提交项目到版本库中(Master分支),工作区的修改不被提交。
- 此时提交的是暂存区的文件,工作区不受影响。
版本穿越
- GIT中最强大的操作就在于进行版本的回退以及前进的状态切换。
在任何的开发之中,对于软件的操作代码,都很难保证其不恢复到原始状态 。因为新增加的程序可能会由于某些原因从而导致失败,而需要快速的进行版本恢复。
GIT进行版本穿越的核心概念在于每一个Commit ID。
查看当前的日志信息:git log
- 可以发现整个日志记录采用的是栈的形式,最早的提交保存在最后。
在一行上显示:git log --pretty=oneline![在这里插入图片描述](https://img-blog.csdnimg.cn/68f1de9077f44c89b4de57111dec4c82.png)
- 实际上在Master分支上存在有一个HEAD指针,这个指针指的是当前正在使用的版本。
HEAD指针默认指向最新的提交点。
如果现在要是改变了HEAD的指针,那么就相当于可以任意的修改软件的版本。
回退到上一个版本:git reset --hard HEAD~1
- 实际上此时就实现了版本的回退操作,每当退回上一次的保存点(Commit ID)。如果回退错误了呢?进行回滚!
此时就需要知道提交点的信息,依靠传统的日志就不行了。
必须使用一个删除的提交点日志信息。
查看所有回退的提交点:git reflog
发现所有针对于版本的操作,reflog都可以记录好,下面进行恢复。
恢复到最后一次提交点:git reset --hard 7d8248d
执行后:
现在只要有了正常的提交,所有的提交点就可以作为恢复点存在。
撤销修改
- 在任何开发过程之中,都很难保证不会发生“无用修改”操作。而在git里面针对于此类的操作也是有所支持的,实际上就是指修改撤销的功能,可是这里需要考虑两种情况。
情况一、在工作区发生了改变,但是此时没有提交到暂存区
- 如果要想恢复某个文件原本的代码,可以使用checkout操作:
git checkout hello.java
情况二、已经添加了暂存区,但是没有提交到Master分支
- 将保存在暂存区中的hello.java文件恢复到工作区中:
git reset HEAD hello.java
随后还需要恢复已有的内容:git checkout hello.java
文件删除
- 如果要删除,删除
工作区
内容即可:del hello.java
需要注意的是,此时只是在工作区中被删除了,而在MASTER分支上的代码依然存在hello.java文件,所以此时必须进行更新提交。
git commit -a -m "delete hello.java"
只要此时更新一提交,那么文件将彻底删除,如果想恢复呢?使用版本穿越。
以上的操作指的是删除已经被提交的情况,那么还有一种情况:在工作区删除
所以MASTER分支上依然存在有hello.java文件,可以利用MASTER分支上的hello.java文件进行恢复:
git checkout --hello.java
- Git是目前世界上最先进的分布式版本控制系统(没有之一),开源,免费的。
作用:
可以快速管理项目(一堆文件的集合)
主要作用: - 可以快速管理项目(一堆文件的集合)
- 版本管理
- 协同修改
- 数据备份
- 权限控制
- 历史记录管理
- 分支管理
一、下载和简介
1.下载
2.git的作者就是linux的作者
- linux是一个操作系统。在git bash中可以使用linux中的大部分命令。
二、git的基本使用
- 右键选择 Git Bash Here
1.检测git版本
git --version
2.设置用户名和邮箱(第1次)
作用:
告诉git你是谁
git config --global user.name xiaozhao
git config --global user.email 2025235728.com
3.创建一个文件夹
mkdir wyy-music
4.进入文件夹
cd wyy-music/
三、git本地仓库的管理
- 在上面创建的文件夹下,分成了
三个区域
:
【工作区】
我们都是在工作区去创建文件或文件夹
【缓存区(暂时区)】
如果说你创建的文件或文件夹,要想让git管理,你需要把工作区的代码扔到暂存区
【版本库】
:是真正进行项目的发布的代码。
1. 查看版本
(1)默认显示
git log
(2)简化显示
git log --pretty=oneline
(3) 简短版本
git reflog
每一个版本都有一个唯一的ID
git reflog可以显示出所有的版本 包含你回退的版本。
2.查看状态
git status
3.把工作区的所有的文件或文件夹扔到暂存区
git add *
*表示把工作区的所有的文件或文件夹(如果是空的文件夹,git是不进行管理的)扔到缓存区
git add .
同*
4.将工作中的文件和缓存区文件进行对比
git diff 文件名
5.版本的前进和后退
git reset --hard 版本ID
回到任意的版本 配合git reflog 还可以再回去
git reset --hard HEAD^
HEAD^
表示回到上一个版本
HEAD^^
表示回到上上个版本
6.删除文件相关
如果某个文件被我们删除了:
- 1)删除了,没有提交(commit)
- 恢复文件:
A)reset
B)git checkout – App.js
- 2)删除了,提交了(形成版本了)
- 恢复文件:
reset
如果文件没有形成版本,你删除,就删除,找不回来了。
四、分支管理
- 默认情况下,我们的操作都是在master分支上进行的操作。master也叫主分支。
真实开发,不同的公司都有自己的分支管理规范。
根据功能,分成不同的分支。
根据成员,分成不同的分支。
1.创建分支
git branch 分支名
是在已有版本上进行创建的。
创建好后,并不会自动切换到b1分支
2.查看分支
git branch -v
3.切换分支
git checkout b1
4.合并分支
先切到接受合并的分支 git checkout master
git merge b1
5.删除分支
git branch -d b1
五、远程仓库管理
- 使用gitee充当远程仓库,需要注册一个账号。
1.创建远程仓库
- 创建完毕后,每一个远程仓库,都有一个地址:
分两类:
1)https://gitee.com/tubie/wyy-music.git 走https每一次可能要提示输入用户名和密码
2)git@gitee.com:tubie/wyy-music.git
先使用https开头的地址
2.克隆远程仓库到本地
git clone https://gitee.com/tubie/wyy-music.git
默认情况下,你克隆下来的仓库和远程仓库就建立了关联。
3.把本地仓库的版本推到远程仓库
git push 远程仓库的地址
后面再写代码时,也是先进行本地仓库的管理,再进行远程仓库的管理
4.查看远程仓库都有哪些别名
git remote -v
远端仓库
有一个默认的别名,叫origin
。
也就是说,你可以这样推送:git push origin master
5.给远程仓库起别名
git remote add 远程仓库的地址
再push时:git push music master
6.删除别名
git remote remove music
7.本地仓库与远程仓库建立联系
独立创建一个远程仓库,叫first,独立创建一个本地仓库,叫one,默认情况下,两者之间是没有关系的
可以通过git remote -v 查看本地仓库是否有远程仓库的别名。
git remote -v
现在,本地仓库要和远程仓库建立联系:
git remote add origin https://gitee.com/tubie/first.git
可以把本地仓库的版本扔到远程仓库
git push origin master
六、配置SSH
不需要登录
(1)打开一个dos窗口,输入如下:
ssh-keygen -t rsa -C "2667074093@qq.com"
(2)在家目录中会生成.ssh目录,里面有两上文件,一个私钥,一个是公钥,复制公钥(.pub是公钥)。
(3) 打开码云,copy到码云中
(4) 把推送的地址改为 SSH 链接
git remote add origin git@gitee.com:liu-mengzhao/first.git
后面推送时:
git push origin master
七、从仓库中拉取数据
现在的情况下,远程仓库更新了,本地仓库向远程仓库提交版本。
如果你本地仓库的版本和远程仓库的版本不一致,本地仓库创建的版本再向远程仓库提交时,提交不成功的。
此时,你需要使用git pull把远程仓库中你没有版本拉取下来。
也就是说,在你推送新版本之前,先去pull。
git pull origin master