Git的基本使用

1、Git概述

git的优势

分布式的版本控制

  • 大部分操作在本地完成,不需要联网
  • 保证完整性(使用hash)

git的区域概念

  • 工作区:就是我们写代码的地方
  • 暂存区:临时存储,可以撤回
  • 本地库:将暂存区的文件提交 记录了历史提交的版本信息
  • 远程库:将本地库中的文件push到远程库

2、Git的基本使用

2.1初始化本地库

命令

git init

演示

进入一个空的目录(D:\Desk\GitTest\Rep1),执行 git init命令,然后会为当前这个目录生成一个隐藏的.git文件夹,然后这个文件夹(D:\Desk\GitTest\Rep1)就被初始化为了一个`本地仓库

在这里插入图片描述

.git文件夹

里面存放的是本地库相关的子目录和文件,包括一些配置信息,版本信息等,不要随意的修改的删除

2.2设置签名

形式

用户名:xx
邮件地址:xxx@xx.com

作用:为了区分不同开发人员的身份信息

注意:这里设置的签名和你的远程仓库的账号和密码没有任何关系

命令

项目级别/仓库级别:仅在当前的本地库有效

项目级别的设置会将信息保存在初始化本地库时的 .git目录下的config文件中保存

git config user.username xxx
git config user.email xxx.@xx.com

系统级别的设置:登录当前操作系统的用户范围

系统级别的签名设置会将数据保存在 用户的家目录下(windows下 C:\Users\用户名)的 .gitconfig文件中

git config --global user.name xx
git config --global user.email xx@xx.com

级别优先级

  • 就近原则:项目优先级大于系统的优先级,即二者都有时使用项目级别的签名
  • 如果只有系统用户级别的签名,就以系统用户级别的签名为准
  • 不允许二者都没有(不允许提交代码到远程仓库)

2.3添加/提交/查看状态

添加文件到暂存区

git add [fileName].

将暂存区的文件撤回

git rm --cached [fileName].

将暂存区的文件提交到本地库

git commit -m "提交信息" [fileName].

查看状态

查看当前分支 工作区 暂存区的状态

git status

当一个文件提交之后,对文件进行了修改,那么有两种方式可以再次提交

  • 先add 后commit (正常步骤)

  • 直接使用commit命令 带上 -a这个参数

     git commit -am "提交的信息" [fileName].
    

2.4查看提交历史记录

可以查看所有提交的历史信息(按照提交时间排序)以及当前所在的提交版本

git log    --显示详细的信息 显示所有版本

在这里插入图片描述

更简洁的命令

git log --pretty=oneline   只能显示当前版本及前版本

在这里插入图片描述

git log --online     //只能显示当前版本及前版本

在这里插入图片描述

git reflog    --详细显示了版本之间需要移动的次数 HEAD@{n} 显示所有版本

在这里插入图片描述

2.5版本切换

版本移动的本质

就是一个指针,名字就叫HEAD,切换版本时本质上就是指针的移动

实际操作

1、基于索引进行版本的切换

随意的切换版本

git reset --hard 版本的哈希索引值

2、使用^符号

只能往前退

git reset --hard HEAD^^  几个^就回退几个版本

3、使用~符号

也是只能后退,对^的简便操作

git reset --hard HEAD~n  回退n个版本

2.6reset命令的三个参数对比

  • –soft

    仅仅在本地库移动HEAD指针

  • –mixed

    在本地库移动HEAD指针,重置暂存区

  • –hard

    在本地库移动HEAD指针,并且重置暂存区和工作区

2.7删除文件的找回

提提:删除前 文件存在的状态commit到了本地库

git reset --hard [指针位置]

--如果删除操作已经提交到了本地库,指针位置指向文件存在的历史记录
--如果删除操作没有提交到本地库,指针位置使用HEAD(当前位置)

2.8文件的比较

git diff [filename]  --将工作区的文件和暂存区的文件进行比较
git diff [本地库的历史版本] [filename] --将工作区中的文件和本地库历史记录进行比较

不带文件名 比较多个文件

3、分之管理

3.1分之的工作

在这里插入图片描述

3.2分之的好处

1、同时并行推进多个功能的开发,提高开发效率,各个功能开发完毕后,只需合并分之即可

2、各个分之在开发过程中,是相互独立的,如果某一分之开发失败,不会对其他分之有任何的影响,只需要删除失败的分之重新开始即可

3.3分之的基本操作

默认有的分之:master分之

注意:至少commit一次才能创建分之

查看当前所在分之
git status 

查看所有分之(也可以查看当前所在分之,前面带*号)
git branch -v 

创建分之
git barnch [name] 

切换分之
git checkout [name]

删除分之
git branch -d [name]

3.4分之合并

1. git checkout [接受修改的分之name]  //切换到被修改的分之(例如master)

2. git merge [有新内容的分之name]  

3.5分之合并后的冲突问题

注意:git对于文件的管理是根据行的内容,也就是说两个分之的同一个文件内容可以不一致,可以合并,

前提是 : 一个文件的同一行 两个分之不能都修改然后提交

分之冲突示例

由于两个分之同时修改了同一个文件的同一行,并都做了提交操作,所以在合并分支的时候就出现了冲突
在这里插入图片描述

解决冲突
在这里插入图片描述

4、Git基本原理

4.1hash算法

Git底层采用的是SHA1这种加密算法验证文件的完整性

在这里插入图片描述

4.2保存版本机制

快照机制

4.3分之管理原理

本质上就是指针的切换

5、远程操作&Github

5.1入门操作

  • 1、本地初始化本地库(git init)
  • 2、创建远程库(注意:这种方式的推送一定不能点初始化,因为初始化操作也是一次提交,这样导致我们的本地库和远程库版本不一致,那么就无法push)
  • 3、设置远程库的地址和名称
  • 4、push到远程库
//显示远程库的列表
git remote -v    

// 添加一个远程库地址 并为远程仓库起一个别名 一般都是origin
git remote add [name]  http:xxxx 

//推送到远程库
git push [远程库名] [分之名]   
// git push origin master    

5.2克隆远程库

//克隆远程库(将远程库的所有信息全部搂下来 包括内容+分之+提交历史记录)
git clone http://xxx    

//指定tag版本克隆
git clone -b [tag] http://xxx   

克隆做的事情

  • 1、完整的把远程库下载到本地
  • 2、自动设置远程库地址和别名
  • 3、自动初始化本地库(git init)

5.3拉取

//将远程库中的某一分之的内容拉取下来并合并到本分之中
git pull origin master

//等于下面的两个操作
 fetch + merge   

 //将远程库的内容抓取下来 (注意:此时抓取的远程库的内容没有合并到本地库)
 git fetch [远程库地址别名] [远程库分支名]  
 
 //将拉取的远程库的内容合并到本地库
 git megre [远程地址别名]/[远程库分之名]   

5.4团队协作的冲突&push失败

  • 如果不是基于远程库最新版本所做的修改,那么不能推送(类似于乐观锁原理,现在有一个远程库,然后多个本地库现在跟远程库的版本一致,然后某一个本地库进行了push操作,然后远程库的版本就发生了变化,现在其他的本地库就无法进行push操作了,因为不是基于最新版进行的push) 必须先进行拉取(pull)操作
  • 如果拉取下来后进入冲突状态,则按照"3.5节分之合并后的冲突问题"解决即可,然后就可以推送到远程库

6、标签tag

像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签

6.1基本使用

git有两种标签 轻量标签附注标签

//创建轻量标签 默认的就为当前的版本附带上了这个标签
git tag [name]

//创建附注标签 使用-a选项 后面-m标注一些信息
git tag -a [name] -m "一些信息"
    
//列出所有的标签
git tag    

//显示标签信息与之对应的版本信息
git show [标签名]

//后期打标签 假设在 v1.2 时你忘记给项目打标签
git tag v1.2 9fceb02      

6.2推送到远程

  • 默认情况下,通过上面的创建标签命令创建出一个标签时,只能在本地有效,并且在进行将代码推送到远程时,标签的信息并不会一起推送到远程 ,你必须显式地推送标签到共享服务器上。
  • 这个过程就像共享远程分支一样——你可以运行 git push origin <tagname>
git push origin [标签名]

​ 推送多个标签

  • 如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。

  • 使用 git push <remote> --tags 推送标签并不会区分轻量标签和附注标签, 没有简单的选项能够让你只选择推送一种标签。

git push origin --tags

6.3删除标签

//删除本地库的标签
//注意这个命令并不会从远程仓库中移除这个标签
git tag -d [name]

//删除远程库中的标签 (本地还有)
git push origin --delete <tagname>

git push origin [标签名]

​ 推送多个标签

  • 如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。

  • 使用 git push <remote> --tags 推送标签并不会区分轻量标签和附注标签, 没有简单的选项能够让你只选择推送一种标签。

git push origin --tags

6.3删除标签

//删除本地库的标签
//注意这个命令并不会从远程仓库中移除这个标签
git tag -d [name]

//删除远程库中的标签 (本地还有)
git push origin --delete <tagname>

7常见问题的解决方案

1.推送失败

说明远程库的版本已经变化,这时就需要使用git pull命令拉取最新的代码,如果有冲突就解决,解决完就可以推送到远程库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shstart7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值