【Git】全面详细了解开发者必备工具Git(2.0)

时间:2021-12-21 01:16:09

文章目录

  • 学习目标
  • 起步——关于版本的控制
  •   文件的版本
  •   版本控制软件
  •   使用版本控制软件的好处
  •   版本控制系统的分类
  •   本地版本控制系统
  •   集中化的版本控制系统
  •   分布式的版本控制系统
  • Git基础概念
  •  什么是Git
  •  Git的特性
  •  SVN的差异比较
  •  Git的记录快照
  •  近乎所有的操作都是本地执行
  •  Git中的三个区域
  •  基本的Git工作流程
  • 安装并配置Git
  •  下载
  •  配置用户信息
  •  通过命令快速检查用户配置信息
  • Git的操作与使用
  •  获取帮助信息
  •  获取Git仓库的两种方式
  •  在现有目录中初始化仓库
  •  工作区中文件的四种状态
  •  检查文件的状态
  •  跟踪新文件
  •  显示文件
  •  提交更新
  •  对已提交的文件进行修改
  •  暂存和提交已修改的文件
  •  撤销对文件的修改
  •  向暂存区中一次性添加多个文件
  •   取消暂存的文件
  •   跳过使用暂存区域
  •   移除文件
  •   忽略文件
  •   查看提交历史
  •  vim
  •   回退到指定的版本
  •   远程仓库操作
  •   小结
  • 分支
  •   创建查看切换分支
  •   合并分支
  •   删除分支
  •   分支合并冲突问题
  • 团队协作
  •  团队协作的分支管理
  •  跨团队协作

学习目标

  • 能够掌握Git基本命令的使用
  • 能够使用Github创建和维护远程仓库
  • 能够掌握Git分支的基本使用

起步——关于版本的控制

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

Git基础概念

Git是一个开源的分布式版本控制系统,是目前世界上最先进,最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
特点:项目越大越复杂,协同开发者越多,越能体现出Git的高性能和高可用性。

Git之所以快速和高效,主要依赖于它的如下两个特效:

  1. 直接记录快照,而非差异比较。
  2. 近乎所有操作都是本地执行

传统的版本控制系统是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累计的差异。

【Git】全面详细了解开发者必备工具Git(2.0)


【Git】全面详细了解开发者必备工具Git(2.0)

Git快照是在原有文件版本的基础上重新生成一份新文件,类似于备份,为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

使用Git管理的项目,拥有三个区域,分别是工作区,暂存区,Git仓库,这三个工作区还对应了三种状态,分别是已修改,已暂存,已提交。

【Git】全面详细了解开发者必备工具Git(2.0)


【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

  1. 在工作区中修改文件。
  2. 将你想要下次提交的更改进行暂存。
  3. 提交更新,找到暂存区的文件,以快照形式永久存储。

安装并配置Git

下载地址 一直点下一步,安装就可以了。

【Git】全面详细了解开发者必备工具Git(2.0)


安装成功

【Git】全面详细了解开发者必备工具Git(2.0)

安装完Git之后,要做的第一件事就是设置自己的用户名和邮件地址,因为通过Git对项目进行版本管理的时候,Git需要使用这些基本信息,来记录是谁对项目进行了操作。

【Git】全面详细了解开发者必备工具Git(2.0)

我们进行全局配置用户名和邮箱,(配置一次就好,用户名邮箱自定义即可不用跟什么一样,只是提交版本的时候展示的相关信息而已)

【Git】全面详细了解开发者必备工具Git(2.0)

通过 全局配置的用户名和邮箱地址,会被写入到C:/Users/用户名文件夹/.gitconfig文件中,这个文件是Git的全局配置文件,配置一次即可永久生效。
可以使用记事本打开此文件,来查看对Git进行了哪些全局操作。

【Git】全面详细了解开发者必备工具Git(2.0)

除了使用记事本查看全局的配置信息外,还可以运行如下的终端命令,快速的查看Git的全局配置信息。

查看所有的全局配置项

git config --list --global

查看指定的全局配置项

git config user.name
git config user.email

【Git】全面详细了解开发者必备工具Git(2.0)

Git的操作与使用

可以使用git help 命令,无需联网即可在浏览器中打开帮助手册,

例如:
查看config命令相关信息

【Git】全面详细了解开发者必备工具Git(2.0)


会弹出浏览器 里面有详细的命令教学。

【Git】全面详细了解开发者必备工具Git(2.0)


也可以 使用 git config -h 来在终端中弹出简介帮助。

【Git】全面详细了解开发者必备工具Git(2.0)

  1. 将尚未进行版本控制的本地目录转换为Git仓库
  2. 从其他服务器克隆一个已存在的Git仓库

以上两种方式都能够在自己的电脑上得到一个可用的Git仓库。

如果自己有一个尚未进行版本控制的项目目录,想要用Git来控制它,需要执行如下两个步骤:

3. 在项目跟目录中,通过鼠标右键打开“Git Bash”。

4. 执行 git init命令将当前的目录转化为Git仓库,

git init命令会创建一个名为.git的隐藏目录,这个.git目录就是当前项目的Git仓库,里面包含了初始的必要文件,这些文件是Git仓库的必要组成部分。

【Git】全面详细了解开发者必备工具Git(2.0)

【Git】全面详细了解开发者必备工具Git(2.0)

工作区中的每一个文件可能有四种状态,这四种状态共分为两大类。

【Git】全面详细了解开发者必备工具Git(2.0)


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】全面详细了解开发者必备工具Git(2.0)

使用命令git add开始跟踪一个文件,git add <文件名>,跟踪之后我们可以在使用git status命令来查看。
跟踪指定文件 跟踪之后自动添加到暂存区 修改文件后执行此命令放到暂存区
git add 文件名
//跟踪全部文件
git add.
提交所有被删除和修改的文件到数据暂存区
git add -u 等价于 git add –update
提交所有被删除、被替换、被修改和新增的文件到数据暂存区
git add -A 等价于 git add –all

【Git】全面详细了解开发者必备工具Git(2.0)


表示文件已经暂存。

显示文件
ls
显示所有文件 包括隐藏
ls -a
查看文件内容
cat 文件名

现在暂存区中有一个gehangbianhuan.html文件等待被提交到Git仓库中进行保存。可移植性git commit命令进行提交,其中-m选项后面是本次的提交消息,用来对提交的内容做进一步的描述。

【Git】全面详细了解开发者必备工具Git(2.0)


使用git status命令再次查看文件状态

【Git】全面详细了解开发者必备工具Git(2.0)


显示没有任何的修改,没有任何文件需要提交。

【Git】全面详细了解开发者必备工具Git(2.0)

目前,gehangbianhuan.html文件已经被Git跟踪,并且工作区Git仓库中的gehangbianhuan.html文件内容保持一致,修改了工作区中gehangbianhuan.html的内容之后,再次运行git status命令,会看到如下内容。

【Git】全面详细了解开发者必备工具Git(2.0)

文件被跟踪了,跟踪了然后咱们修改了文件,所以提示修改了但是没有暂存。

目前,工作区中的gehangbianhuan文件已经被修改,如果要暂存这次数据,我们还得需要git add这个命令,这个命令其实是多功能命令,主要有以下三个功能。

  1. 可以用他来跟踪文件,跟踪文件后会暂存当前内容。
  2. 跟踪文件修改之后,我们可以再次使用这个命令进行暂存。
  3. 把有冲突的文件标记为已解决文件。

我们这里就是用的第二个功能。

【Git】全面详细了解开发者必备工具Git(2.0)


使用git commit 再次提交文件

【Git】全面详细了解开发者必备工具Git(2.0)

撤销对文件的修改指的是:把对工作区中对应文件的修改,还原成Git仓库中之前保存的版本。
撤销对文件的修改 (没有提交到暂存区)
git checkout – 文件名
操作的结果:所有的修改会丢失,且无法恢复!危险性比较高,请慎重操作!

【Git】全面详细了解开发者必备工具Git(2.0)


我们先对文件进行修改,修改保存后,撤销掉之前的修改,类似于撤回,它会选择git中提交的最新版本,覆盖工作区中的修改。

【Git】全面详细了解开发者必备工具Git(2.0)

如果需要被暂存的文件个数比较多,可以使用如下的命令,一次性将所有的新增和修改过的文件加入暂存区。 命令:git add .(点),使用此命令可以将当前文件内的所有文件添加到暂存区,这个命令很常用。

新建了三个文件,并没有跟踪放到暂存区。

【Git】全面详细了解开发者必备工具Git(2.0)


我们全部跟踪并放到暂存区。

【Git】全面详细了解开发者必备工具Git(2.0)

如果需要从暂存区中移除对应的文件,可以使用如下的命令:
git reset <文件名>。如果取消所有文件,同样是用.(点)。
取消暂存的文件
git reset <文件名>
取消所有暂存的文件
git reset .
将文件从暂存区移除,同时取消跟踪
git rm --cached 文件名

【Git】全面详细了解开发者必备工具Git(2.0)

Git标准的工作流程是工作区→暂存区→Git仓库,但有时候这么做略显繁琐,此时可以跳过暂存区,工作区中的修改提交到Git仓库,这时候Git工作的流程简化为了工作区→Git仓库。
Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,修改的文件从而跳过git add步骤。

【Git】全面详细了解开发者必备工具Git(2.0)

从Git仓库中移除文件的方式有两种

  1. 从Git仓库和工作区中同时移除对应的文件
    git rm -f index.js
  2. 【Git】全面详细了解开发者必备工具Git(2.0)


  3. 只从Git仓库中移除指定的文件,但保留工作区中对应的文件
    git rm --cached index.js

解析:两个绿色的D表示被打上了删除标记,当下一次提交的时候就会从仓库中删除,js文件执行命令后工作区中的js文件被删除,仓库中的js被打上了删除标记,css执行命令后,css被打上了删除标记,工作区中的css没被删除而是显示了未跟踪状态,但我们使用提交命令(提交所有被跟踪过的文件)后,就将打上删除标记的两个文件从仓库中删除了,index.css没有被跟踪,所以提交命令没有做任何的提交操作。

3. 删除文件夹
 
git rm -r 文件夹名 --cached

都需要进行一次新的提交才会进行删除仓库文件 第一次会删除工作区中的文件 然后给要删除的仓库文件打上删除记号

一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。在这种情况下,我们可以创建一个名为.gitignore的配置文件,列入要忽略的文件的匹配模式。

文件 .gitignore的格式规范如下:

  1. 以#开头的是注释
  2. 以/结尾的是目录
  3. 以/开头防止递归
  4. 以!开头表示取反
  5. 可以使用glob模式进行文件和文件夹的匹配(glob指简化了的正则表达式)

详情请看:正则表达式详情

【Git】全面详细了解开发者必备工具Git(2.0)


注意:命名文件的时候不能有文件名只能有后缀名

【Git】全面详细了解开发者必备工具Git(2.0)


新建了个test

【Git】全面详细了解开发者必备工具Git(2.0)


我们查看文件状态 发现没有 说明忽略成功了

【Git】全面详细了解开发者必备工具Git(2.0)

如果希望回顾项目的提交历史,可以使用git log这个简单且有效的命令,
查看本地仓库提交历史 只能显示到当前主分支
git log
查看本地仓库的代码操作历史
git reflog

【Git】全面详细了解开发者必备工具Git(2.0)


【Git】全面详细了解开发者必备工具Git(2.0)


按q即可退出查看。

【Git】全面详细了解开发者必备工具Git(2.0)


【Git】全面详细了解开发者必备工具Git(2.0)


【Git】全面详细了解开发者必备工具Git(2.0)

提交没写上相关信息,vim系统 误入

摁i键切换成插入模式 可以进行书写
  退出的话 摁esc  然后冒号 wq退出

【Git】全面详细了解开发者必备工具Git(2.0)

这个回退是回退到工作区
回退到上一次的提交版本
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。

  1. 初始化Git仓库的命令
  • git init
  1. 添加到暂存区
  • git add .
  1. 查看文件状态的命令
  • git status
  • git status -s
  1. 一次性将文件加入暂存区的命令
  • git add
  1. 将暂存区的文件提交到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 发送请求给原创作者