学Git?这一篇就够了

Git快速上手(GIt总结回顾)

历史

林纳斯(LINUX之父)为了更好的管理linux内核代码,开发了Git(用了很短很短的时间。。。)

是什么

Git是一个版本控制器

版本控制 -> 版本迭代 ->新的版本

Git是目前世界上最先进的分布式版本控制系统

有哪些

主流的版本控制器有Git,SVN,CVS,VSS,TFS,Visual Studio Online

Git与SVN的区别

  • SVN是集中式版本控制系统
  • Git是分布式版本系统
  • SVN的版本困是放在中央服务器上,工作的时候首先从中央服务器得到最新版本,工作后将代码提交到中央服务器
  • Git虽然也有自己的集中式版本库或中央服务器,但更倾向于分布式模式。每个人都有本地仓库,没有网络也可以commit,查看版本记录。。。
  • Git将内容安元数据方式存储,SVN是按文件存储
  • Git没有全局版本号,而SVN有(这是一个大的特这区别)
  • Git可以更好的支持分支和合并

操作Git有哪些软件(平台)

Git Bash:Linux网格的命令行,使用最多(最推荐)

Git Cmd:Windows风格的命令行

Git GUI :图形界面的Git(一键式傻瓜操作)

Git的基本理论

Git本地有三个工作区域:

  1. 工作目录(workspace):就是存放项目代码的地方
  2. 暂存区(Stage/index):用于临时存放代码的改动,事实上他是一个文件,保存即将提交的文件列表信息。
  3. 资源库(Repository或Git Directory):就是本地仓库,安全存放数据的位置,这里面有你提交的所有版本信息,其中HEAD指向当前提交commit

Git远程仓库

  1. Git仓库(Remote Directory):远程仓库,托管代码的服务器

所以Git一共可以分为四个区域。

Git中的文件状态

1 Untrached

未跟踪,在文件夹中,没有加入到git库,不参与版本控制,可通过git add +文件名将状态变为 staged

2 Unmodify

文件已经入库,未修改(即与版本库中的文件内容完全一样),这种类型的文件一般有两种去处

  1. 若后面被修改则会变为Modified状态
  2. 若使用 git rm +文件名 移出版本库,状态变为Untrached

3 Modified

文件已修改(仅仅是修改,没有进行其他操作),这种类型文件同样也有两种去处

  1. 通过git checkout +文件名,丢弃修改过的痕迹,返回Unmodify状态(即从库中取出文件覆盖当前修改)
  2. 通过git add +文件名,将其变为staged状态

4 Staged

暂存状态,执行git commit将修改同步到库中,这时库中的文件和本地文件变为一致,文件未Unmodify状态,执行git reset HEAD +文件名

取消暂存,文件变为Modified状态

Git的一般使用流程

  1. 添加修改文件
  2. git add . 加入暂存区
  3. git commit 将暂存区的东西提交到本地仓库
  4. git push 推送远程仓库

在这里插入图片描述

本地项目上传远程仓库

远程仓库比较出名的有Github,Gitee。。。

这里就用Gitee了

  • 在本地项目文件里打开git bash,然后输入命令 git init,然后就文件夹里就会多出一个目录,.git

  • 在码云上建立一个仓库,copy码云地址 ,git remote add origin https://gitee.com/你的码云用户名/你创建的仓库名.git

  • git pull origin master ,将码云上的仓库pull本地

  • git add . 推到暂存区

  • git commit -m “…” 提交到本地仓库

  • git push origin +远程分支名 推到远程仓库

克隆远程项目

  • git clone url
  • git clone -b 分支名 url

版本回退

  • git log 可以查看提交日志(commit Id,提交人,时间,提交内容)

  • git log -pretty=oneline 可以简要的查看(commit Id,提交内容)

  • commit Id不是1,2,3.。。。而是用SHA1(一种算法)生成的,原因是用1,2,3是分布式的版本管理系统,大家都用1,2,3就会冲突

  • git reset --hard HEAD^ 回到上一个版本,HEAD指向当前版本,HEAD上一个版本,HEAD^上上一个版本。。。

  • git reset --hard commit ID 会指向指定commit ID版本,commitID不用写全,写前几位就ok,但也不能写的太少,那样可能无法确定是哪一个

  • git reflog会记录每一次命令,可以查到commit ID

分支管理

分支分为远程分支以及本地分支,一般说的分支就是远程分支。为什么要用分支呢?为什么要用本地分支呢?

首先本地分支单存是为了个人开发方便,因为你可能会同时开发多项功能,而多项功能的 codebase 是相同的(我也是看到别人这样的说法,自己感觉还挺有道理。。。)

远程分支的存在更有意义,当在开发一个产品时,写了一半的代码,没法提交,因为残缺的代码会导致别人无法正常工作,要是写完一次性提交又会有丢失代码的风险,此时分支就起到了很好的作用,每个提交在自己的分支,开发完在合并到master,即安全,也不影响别人的工作

  • git branch 查看本地所有分支
  • git branch -r 查看远程所有分支
  • git branch dev 创建本地分支(任然停留在当前分支)
  • git checkout +分支名 切换到指定分支
  • git branch -b +分支名 创建并切换到新分支
  • git branch -d +分支名 删除指定分支
  • git merge +分支名 合并指定分支到当前分支
  • git push origin +远程分支名 推送到远程某个分支
  • git push origin master:dev 本地master退到远程dev
  • 合并冲突时,就需要舍谁留谁然后再次合并

分支原理

我们每次提交,git会把他们记录成一条时间线,每个分支就是一条分支,master主分支就是这样。master指针指向最新提交,HEAD指针指向master,所以HEAD也就指向最新提交。

  • 在一开始的时候,master指向最新提交,HEAD指向master,随着不断提交,master的时间线会越来越长

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyjIp32V-1591786425117)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200610183130126.png)]

  • 此时创建一个分支dev,就是将dev指向最新提交,而切换分支到dev就是将HEAD指针指向dev

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6ccvlP3-1591786425122)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200610183356203.png)]

  • 提交至dev分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVDlxIIN-1591786425126)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200610183604196.png)]

  • 合并分支至master,就是将master指针指向当前dev指向的提交(Fast Forward),删除dev分支,就是将dev指针删除。所以git创建,合并,删除,分支都很快。

lP3-1591786425122)]

  • 提交至dev分支

[外链图片转存中…(img-KVDlxIIN-1591786425126)]

  • 合并分支至master,就是将master指针指向当前dev指向的提交(Fast Forward),删除dev分支,就是将dev指针删除。所以git创建,合并,删除,分支都很快。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXky3l3a-1591786425130)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20200610184805039.png)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值