> 文档中心 > Git学习总结这一篇就够了

Git学习总结这一篇就够了

文章目录

  • 前言
  • 一、什么是版本控制?
    • 1.1 版本控制概念
    • 1.2 Git和SVN的主要区别
    • 1.3 Git简介
  • 二、使用步骤
    • 2.1 Git命令行操作
    • 2.2 提交命令小结
    • 2.3 版本穿梭测试准备
    • 2.4 版本穿梭操作
    • 2.5 删除文件后找回
    • 2.6 比较文件差异
    • 2.7 分支管理

前言

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。

1. 版本控制工具应该具备的功能:
协同修改:多人并行不悖的修改服务器端的同一个文件。

数据备份:不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。

版本管理:在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式。

权限控制:对团队中参与开发的人员进行权限控制。对团队外开发者贡献的代码进行审核——Git独有。

历史记录:查看修改人、修改时间、修改内容、日志信息。将本地文件恢复到某一个历史状态。

分支管理:允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

一、什么是版本控制?

1.1 版本控制概念

版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

集中式版本控制工具:CVS,SVN,VSS。所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
在这里插入图片描述
分布式版本控制工具:Git,Mercuriale,Bazaar,Darcs。每个人都拥有全部的代码!安全隐患!
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。不会因为服务器损坏或者网络问题,造成不能工作的情况!

在这里插入图片描述

1.2 Git和SVN的主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

1.3 Git简介

在这里插入图片描述
Git官网和Logo
官网地址:https://git-scm.com/
Git学习总结这一篇就够了
Git的优势
1.大部分操作在本地完成,不需要联网
2.完整性保证
3.尽可能添加数据而不是删除或修改数据
4.分支操作非常快捷流畅
5.与Linux命令全面兼容

Git安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Git结构
在这里插入图片描述

Git和代码托管中心
代码托管中心的任务:维护远程库

局域网环境下:GitLab服务器

外网环境下:GitHub,码云

本地库和远程库
团队内部协作:
在这里插入图片描述
跨团队协作:
在这里插入图片描述

二、使用步骤

2.1 Git命令行操作

本地库初始化

Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop$ mkdir gitSpaceAdministrator@DESKTOP-UJHR16T MINGW64 ~/Desktop$ cd gitSpace/Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace$ ls -a./  ../Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace$ pwd/c/Users/Administrator.DESKTOP-UJHR16T/Desktop/gitSpaceAdministrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace$ git initInitialized empty Git repository in C:/Users/Administrator.DESKTOP-UJHR16T/Desktop/gitSpace/.git/Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$ ls -lAtotal 4drwxr-xr-x 1 Administrator 197121 0 Feb 26 18:33 .git/Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$ ll .git/total 7-rw-r--r-- 1 Administrator 197121  23 Feb 26 18:33 HEAD-rw-r--r-- 1 Administrator 197121 130 Feb 26 18:33 config-rw-r--r-- 1 Administrator 197121  73 Feb 26 18:33 descriptiondrwxr-xr-x 1 Administrator 197121   0 Feb 26 18:33 hooks/drwxr-xr-x 1 Administrator 197121   0 Feb 26 18:33 info/drwxr-xr-x 1 Administrator 197121   0 Feb 26 18:33 objects/drwxr-xr-x 1 Administrator 197121   0 Feb 26 18:33 refs/

注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

设置签名
用户名:huang.bingxian
Email地址:1214770110@qq.com

作用:区分不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。

命令
项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name huang.bingxian
git config user.email 1214770110@qq.com
信息保存位置:./.git/config 文件

Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$ git config user.name huang.bingxianAdministrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$ git config user.email 1214770110@qq.comAdministrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$ cat .git/config[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true[user] name = huang.bingxian email = 1214770110@qq.com

系统用户级别:登录当前操作系统的用户范围
git config --global user.name tom_glb
git config --global goodMorning_pro@atguigu.com
信息保存位置:~/.gitconfig 文件

Administrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$ cd ~Administrator@DESKTOP-UJHR16T MINGW64 ~$ pwd/c/Users/Administrator.DESKTOP-UJHR16TAdministrator@DESKTOP-UJHR16T MINGW64 ~/Desktop/gitSpace (master)$  git config --global user.name tom_glbAdministrator@DESKTOP-UJHR16T MINGW64 ~$  git config --global user.email goodMorning_pro@atguigu.comAdministrator@DESKTOP-UJHR16T MINGW64 ~$ cat .gitconfig[user] name = tom_glb email = goodMorning_pro@atguigu.comAdministrator@DESKTOP-UJHR16T MINGW64 ~$

级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。如果只有系统用户级别的签名,就以系统用户级别的签名为准。二者都没有不允许

状态查看
git status:查看工作区、暂存区状态
Git学习总结这一篇就够了
创建一个文件为其添加到暂存区做准备
在这里插入图片描述
将文件提交到暂存区
在这里插入图片描述
从暂存区撤销回去
在这里插入图片描述
从暂存区提交到本地库
Git学习总结这一篇就够了
git status 再看一下
Git学习总结这一篇就够了
箭头为修改goodMoring.txt的部分,后git status 再看一下
在这里插入图片描述
修改完继续提交
在这里插入图片描述

2.2 提交命令小结

状态查看 git status:查看工作区、暂存区状态
添加 git add [file name]:将工作区的“新建/修改”添加到暂存区
提交 git commit -m “commit message” [file name]:将暂存区的内容提交到本地库

2.3 版本穿梭测试准备

准备阶段: git log 查看git的日志
在这里插入图片描述
vim goodMoring.txt文件增加如下部分:
在这里插入图片描述
提交到暂存区和本地库:
在这里插入图片描述
git log 查看git的日志:
在这里插入图片描述
查看日志的几种方法:
git log --pretty=oneline
在这里插入图片描述
git log --oneline
在这里插入图片描述
git reflog HEAD@{移动到当前版本需要多少步}
在这里插入图片描述
多屏显示控制方式:

  1. 空格向下翻页
  2. b 向上翻页
  3. q 退出

2.4 版本穿梭操作

前进后退本质:
在这里插入图片描述
1. 基于索引值操作[推荐]
git reset --hard [局部索引值]
在这里插入图片描述
回到MMMMMMM那行:
在这里插入图片描述
在这里插入图片描述
2. git reset --hard HEAD^ n 一个^表示后退一步,n 个表示后退 n 步
在这里插入图片描述
tail -n 3 goodMoring.txt 显示goodMoring.txt文件的倒数三行

使用~符号:只能后退
git reset --hard HEAD~n 注:表示后退 n 步

在这里插入图片描述
reset 命令的三个参数对比
-soft 参数:仅仅在本地库移动 HEAD 指针
Git学习总结这一篇就够了
–mixed 参数 在本地库移动 HEAD 指针,重置暂存区
Git学习总结这一篇就够了
–hard 参数 在本地库移动 HEAD 指针,重置暂存区,重置工作区

2.5 删除文件后找回

在这里插入图片描述
在这里插入图片描述
删除文件并找回:
 前提:删除前,文件存在时的状态提交到了本地库。
 操作:git reset --hard [指针位置]
 删除操作已经提交到本地库:指针位置指向历史记录
 删除操作尚未提交到本地库:指针位置使用 HEAD

2.6 比较文件差异

 git diff [文件名]: 将工作区中的文件和暂存区进行比较
 git diff [本地库中历史版本] [文件名]: 将工作区中的文件和本地库历史记录比较
 不带文件名比较多个文件
在这里插入图片描述

2.7 分支管理

什么是分支?
在版本控制过程中,使用多条线同时推进多个任务
在这里插入图片描述
分支的好处?
 同时并行推进多个功能开发,提高开发效率
 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支操作
创建分支:git branch [分支名]
 查看分支:git branch -v
 切换分支:git checkout [分支名]
 合并分支:第一步:切换到接受修改的分支(被合并,增加新内容)上git checkout [被合并分支名] 第二步:执行 merge 命令git merge [有新内容分支名]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
合并分支
在这里插入图片描述
解决合并分支后的冲突问题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
冲突的表现:
Git学习总结这一篇就够了
冲突的解决:
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m “日志信息”
注意:此时 commit 一定不能带具体文件名
在这里插入图片描述