✍️ 作者简介: 前端新手学习中。
💂 作者主页: 作者主页查看更多前端教学
🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习
文章目录
学习目标
- 能够掌握Git基本命令的使用
- 能够使用Github创建和维护远程仓库
- 能够掌握Git分支的基本使用
起步——关于版本的控制
文件的版本
版本控制软件
使用版本控制软件的好处
版本控制系统的分类
本地版本控制系统
集中化的版本控制系统
分布式的版本控制系统
Git基础概念
什么是Git
Git是一个开源的分布式版本控制系统,是目前世界上最先进,最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
特点:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性。
Git的特性
Git之所以快速和高效,主要依赖于它的如下两个特效:
- 直接记录快照,而非差异比较。
- 近乎所有操作都是本地执行
SVN的差异比较
传统的版本控制系统是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累计的差异。
Git的记录快照
Git快照是在原有文件版本的基础上重新生成一份新文件,类似于备份,为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
近乎所有的操作都是本地执行
Git中的三个区域
使用Git管理的项目,拥有三个区域,分别是工作区,暂存区,Git仓库,这三个工作区还对应了三种状态,分别是已修改,已暂存,已提交。
基本的Git工作流程
- 在工作区中修改文件。
- 将你想要下次提交的更改进行暂存。
- 提交更新,找到暂存区的文件,以快照形式永久存储。
安装并配置Git
下载
下载地址
一直点下一步,安装就可以了。
安装成功
配置用户信息
安装完Git之后,要做的第一件事就是设置自己的用户名和邮件地址,因为通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作。
我们进行全局配置用户名和邮箱,(配置一次就好,用户名邮箱自定义即可不用跟什么一样,只是提交版本的时候展示的相关信息而已)
通过 全局配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹/.gitconfig文件中,这个文件是Git的全局配置文件,配置一次即可永久生效。
可以使用记事本打开此文件,来查看对Git进行了哪些全局操作。
通过命令快速检查用户配置信息
除了使用记事本查看全局的配置信息外,还可以运行如下的终端命令,快速的查看Git的全局配置信息。
查看所有的全局配置项
git config --list --global
查看指定的全局配置项
git config user.name
git config user.email
Git的操作与使用
获取帮助信息
可以使用git help 命令,无需联网即可在浏览器中打开帮助手册,
例如:
查看config命令相关信息
会弹出浏览器 里面有详细的命令教学。
也可以 使用 git config -h 来在终端中弹出简介帮助。
获取Git仓库的两种方式
- 将尚未进行版本控制的本地目录转换为Git仓库
- 从其他服务器克隆一个已存在的Git仓库
以上两种方式都能够在自己的电脑上得到一个可用的Git仓库。
在现有目录中初始化仓库
如果自己有一个尚未进行版本控制的项目目录,想要用Git来控制它,需要执行如下两个步骤:
3. 在项目跟目录中,通过鼠标右键打开“Git Bash”。
4. 执行 git init命令将当前的目录转化为Git仓库,
git init命令会创建一个名为.git的隐藏目录,这个.git目录就是当前项目的Git仓库,里面包含了初始的必要文件,这些文件是Git仓库的必要组成部分。
工作区中文件的四种状态
工作区中的每一个文件可能有四种状态,这四种状态共分为两大类。
Git操作的最终结果:让工作区中的文件都处于“未修改”的状态。
检查文件的状态
可以使用git status命令查看文件处于什么状态。
查看指定文件状态
git status 文件名
查看所有文件状态
git status
查看所有文件状态(方便显示)
git status -s
```![在这里插入图片描述](https://img-blog.csdnimg.cn/756dafcf4c25448aa65dbd8b5b811427.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/ec492e3f61f24f8fa0c6b3c08426a0e9.png)
untracked files 表示未被跟踪的文件,下面显示gehangbianhuan.html,表示此文件未被跟踪,意味着Git之前的快照提交中没有这个文件夹,Git不会自动纳入跟踪范围,除非明确地告诉它,我需要使用git跟踪管理该文件。
**用简洁的方式检查文件状态**
```sql
git status -s
跟踪新文件
使用命令git add开始跟踪一个文件,git add <文件名>,跟踪之后我们可以在使用git status命令来查看。
跟踪指定文件 跟踪之后自动添加到暂存区 修改文件后执行此命令放到暂存区
git add 文件名
//跟踪全部文件
git add.
提交所有被删除和修改的文件到数据暂存区
git add -u 等价于 git add –update
提交所有被删除、被替换、被修改和新增的文件到数据暂存区
git add -A 等价于 git add –all
表示文件已经暂存。
显示文件
显示文件
ls
显示所有文件 包括隐藏
ls -a
查看文件内容
cat 文件名
提交更新
现在暂存区中有一个gehangbianhuan.html文件等待被提交到Git仓库中进行保存。可移植性git commit命令进行提交,其中-m选项后面是本次的提交消息,用来对提交的内容做进一步的描述。
使用git status命令再次查看文件状态
显示没有任何的修改,没有任何文件需要提交。
对已提交的文件进行修改
目前,gehangbianhuan.html文件已经被Git跟踪,并且工作区Git仓库中的gehangbianhuan.html文件内容保持一致,修改了工作区中gehangbianhuan.html的内容之后,再次运行git status命令,会看到如下内容。
文件被跟踪了,跟踪了然后咱们修改了文件,所以提示修改了但是没有暂存。
暂存和提交已修改的文件
目前,工作区中的gehangbianhuan文件已经被修改,如果要暂存这次数据,我们还得需要git add这个命令,这个命令其实是多功能命令,主要有以下三个功能。
- 可以用他来跟踪文件,跟踪文件后会暂存当前内容。
- 跟踪文件修改之后,我们可以再次使用这个命令进行暂存。
- 把有冲突的文件标记为已解决文件。
我们这里就是用的第二个功能。
使用git commit 再次提交文件
撤销对文件的修改
撤销对文件的修改指的是:把对工作区中对应文件的修改,还原成Git仓库中之前保存的版本。
撤销对文件的修改 (没有提交到暂存区)
git checkout – 文件名
操作的结果:所有的修改会丢失,且无法恢复!危险性比较高,请慎重操作!
我们先对文件进行修改,修改保存后,撤销掉之前的修改,类似于撤回,它会选择git中提交的最新版本,覆盖工作区中的修改。
向暂存区中一次性添加多个文件
如果需要被暂存的文件个数比较多,可以使用如下的命令,一次性将所有的新增和修改过的文件加入暂存区。 命令:git add .(点),使用此命令可以将当前文件内的所有文件添加到暂存区,这个命令很常用。
新建了三个文件,并没有跟踪放到暂存区。
我们全部跟踪并放到暂存区。
取消暂存的文件
如果需要从暂存区中移除对应的文件,可以使用如下的命令:
git reset <文件名>。如果取消所有文件,同样是用.(点)。
取消暂存的文件
git reset <文件名>
取消所有暂存的文件
git reset .
将文件从暂存区移除,同时取消跟踪
git rm --cached 文件名
跳过使用暂存区域
Git标准的工作流程是工作区→暂存区→Git仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,工作区中的修改提交到Git仓库,这时候Git工作的流程简化为了工作区→Git仓库。
Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,修改的文件从而跳过git add步骤。
移除文件
从Git仓库中移除文件的方式有两种
- 从Git仓库和工作区中同时移除对应的文件
git rm -f index.js
- 只从Git仓库中移除指定的文件,但保留工作区中对应的文件 git rm --cached index.js
解析:两个绿色的D表示被打上了删除标记,当下一次提交的时候就会从仓库中删除,js文件执行命令后工作区中的js文件被删除,仓库中的js被打上了删除标记,css执行命令后,css被打上了删除标记,工作区中的css没被删除而是显示了未跟踪状态,但我们使用提交命令(提交所有被跟踪过的文件)后,就将打上删除标记的两个文件从仓库中删除了,index.css没有被跟踪,所以提交命令没有做任何的提交操作。
3. 删除文件夹
git rm -r 文件夹名 --cached
都需要进行一次新的提交才会进行删除仓库文件 第一次会删除工作区中的文件 然后给要删除的仓库文件打上删除记号
忽略文件
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一个名为.gitignore的配置文件,列入要忽略的文件的匹配模式。
文件 .gitignore的格式规范如下:
- 以#开头的是注释
- 以/结尾的是目录
- 以/开头防止递归
- 以!开头表示取反
- 可以使用glob模式进行文件和文件夹的匹配(glob指简化了的正则表达式)
详情请看:正则表达式详情
注意:命名文件的时候不能有文件名只能有后缀名
新建了个test
我们查看文件状态 发现没有 说明忽略成功了
查看提交历史
如果希望回顾项目的提交历史,可以使用git log这个简单且有效的命令,
查看本地仓库提交历史 只能显示到当前主分支
git log
查看本地仓库的代码操作历史
git reflog
按q即可退出查看。
vim
提交没写上相关信息,vim系统 误入
摁i键切换成插入模式 可以进行书写
退出的话 摁esc 然后冒号 wq退出
回退到指定的版本
这个回退是回退到工作区
回退到上一次的提交版本
git reset --hard HEAD^
回退到前两次的提交版本
git reset --hard HEAD^^
git reset --hard HEAD~2
回退版本之后本地代码也会相应进行回退,
如果想要退回去
我们可以通过 git reflog查看之前的版本号
然后再使用 git reset --hard 版本号
下面这个回退是回退到暂存区 比如说你提交信息写错了想重新写可以进行回退 重新提交写好提交信息 本地文件不会改变,回退到提交到暂存区时的状态
git reset --soft HEDA
//下面这个回退 是撤销 版本 同时会生成一个新的版本
比如 git reyert HEAD 撤销当前版本 那么本地内容就会回退到上个版本 同时当前版本还会存在 并且还会生成一个新的版本 需要你在vim中填写版本信息 也可以在HEAD后面书写
意思就是说 假如你的当前版本是2 撤销当前版本 会让你的本地文件内容回退到版本1 同时会生成一个版本3 版本一和版本3的内容是相同的 ,版本2不会消失。
撤销当前版本 就相当于把上一个版本重新发布了一次
git reyert HEAD 版本号(前六个字)
远程仓库操作
添加远程仓库
git remote add origin(别名) 仓库地址
查看远程仓库
git remote -v
复制远程仓库代码
git clone 仓库网址
删除创建的别名
git remote remove origin别名
将本地仓库 上传到 远程仓库
git push origin(别名) master:master(将本地主分支master上传到远程主分支master,可以直接简写成master(类似对象属性的简写)) 加上-f 为强制提交 慎用
我们还可以 git push -u origin(别名) master 将 -u 后面两个变量变成了默认值,以后可以直接git push 默认就是 -u设置的内容
注册
注册一个github或gitee,gitcode等任意账号,操作流程页面UI几乎都是没区别的,注册完之后创建一个仓库。这里就不演示了。
拉代码和复制的区别
git clone和git pull的主要区别在于它们的目的。如果你想要完整地复制一个存储库到本地计算机,则应该使用git clone。如果你只想要获取最新的更新,则应该使用git pull。
小结
- 初始化Git仓库的命令 - git init
- 添加到暂存区 - git add .
- 查看文件状态的命令 - git status- git status -s
- 一次性将文件加入暂存区的命令 - git add
- 将暂存区的文件提交到Git仓库的命令 - git commit -m “”提交信息“”
分支
创建查看切换分支
查看本地分支
git branch
查看所有分支
git branch -a
常看所有远程分支
git branch -r
创建分支 创建后当前分支不会改变 不会切换到新分支 加上-b会切换到新分支 中括号是可选
创建一个新分支会将当前分支的内容复制一份儿 , 后续的修改两个分支互不影响
git branch【-b】 分支名
切换分支 每次切换分支之前记得先提交到仓库 不要忘了
git checkout 分支名
合并分支
a如果要把b的内容合并过来 那么久切换到a分支 使用git merge 分支b
git merge 合并到的分支名
删除分支
合并分支后 内容一样 可以删除一个分支
git branch -d 分支名
删除远程分支
git push origin --delete 分支名
分支合并冲突问题
不同分支修改了同一文件的同一行代码才会产生冲突,但是还有其他原因:不同分支修改的是同一文件的相邻行。这也会产生冲突。总之同一个文件 尽量不要再不同分支中同时修改。
当你在两个分支中修改相同文件的话,就会遇到冲突问题,不知道应该采取谁的内容,需要手动解决。
首先 a b分支都对相同文件的内容进行了的修改 然后我我们执行git merge 分支b 将b分支合并到a分支 就会产生冲突 就会是一个冲突状态 需要我们打开文件夹 进行手动选择 这时候的冲突文件会有两边双方的内容 需要将不需要的内容删除保留下想要的内容。 然后再次提交add,上传commit即可。
a 分支就是筛选后的内容 b分支还是原来的内容
团队协作
a和b两个合作开发人员 都从gitee上面复制了一个项目, b先完成了自己添加的部分 然后上传了 上去,上传成功了,等a完成了自己添加的部分上传的时候 上传失败了,因为现在的远程仓库之前被更新了,和你当时使用的内容不一样,所以我们需要养成一个习惯 在push之前先pull更新一下,再次提交就好了,如果pull的时候遇到代码冲突,就再手动解决一下就好。
团队协作的分支管理
上传本地其他分支到远程仓库中 需要切换到当前分支
git push origin 分支名:分支名(如果名称相同可简写成 分支名)
克隆只能克隆主分支 我们可以pull将远程仓库其他分支拉去到本地仓库
git pull origin 分支名:分支名(如果名称相同可简写成 分支名)
拉去完远程仓库分支之后 我们可以直接切换 git checkout 分支 他就会根据远程仓库的分支弄到本地仓库
删除远程分支
git push origin --de lete 分支名
也可以上传到一个空分支就等同于删除
git push origin :分支名
跨团队协作
在网页中先fork一个相同的项目, 然后进行本地的代码修改 并上传到远程,然后再将自己的修改pull requests 发送请求给原创作者
版权归原作者 坚毅的小解同志 所有, 如有侵权,请联系我们删除。