Git相关知识点学习分享

天大地大妈咪最大 提交于 2020-08-19 19:56:41

我是辰兮,很高兴你能来阅读,这篇文章是我初学Git的相关学习的总结,分享给初学者参考,如有不足欢迎指出,分享获取新知,大家一起进步。


一、什么是Git

1、Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
2、 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
3、 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持

Git是目前世界上最先进的分布式版本控制系统(没有之一)


拓展知识点

版本控制器的作用:一个项目开发期间,需要不停的提交补丁(BUG修复)和建立分支。这些工作繁琐,并且消耗大量精力。所以需要一个工具进行管理:版本控制器。


二、 Git和SVN的区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

Git 与 SVN 区别点:
1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。




小结 :分布式 - 存储数据的方式 - 分支 - 版本号 内容完整性


三、Git工作流程

参考网上常见的图解:常见的基础概念

在这里插入图片描述

  • Workspace:工作区: 就是你的工作目录
  • Index / Stage:暂存区: 它像个缓存区域,临时保存你的改动
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

ps: 本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑.


工作流程

1、git clone 克隆远程资源到本地目录,作为工作目录;克隆

2、然后在本地的克隆目录上添加或修改文件;修改

3、如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;跟新

4、本地在修改之后,可以通过git status 查看修改的文件。然后使用git add 添加修改的文件暂到缓冲区;git add添加到缓存

5、在添加之后,可以使用git commit添加到当前的工作区;git commit添加到工作区

6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;

7、git push将本地的修改推送到远程的git服务器。git push


在这里插入图片描述

HEAD:相当于一个指针,指向你最近一次提交后的结果

  • git status 查看状态
  • git add . 添加到暂存区
  • git commit - m"" 用于提交暂存区的文件
  • 简写:git commit -a -m “” 用于提交跟踪过的文件,相当于git add和git commit -m的组合技
  • git log 查看提交历史

Git的基本工作流程修改--暂存--提交更新

1、在工作目录中修改文件

2、暂存文件,将文件的快照放入暂存区域

3、提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录

关于远程代码仓库

通过之前对git代码仓库的描述,我们知道git commit其实只是提交了新版本到本地代码仓库,要想其他人看到你的改动,之后必须push到一个公开的server上才可以。实际上这台server上的代码仓库和你本地的代码仓库并无二致,只是大家都用这个server上的代码仓库作为标准版本而已。


四、git涉及到的概念详解

1、工作区:就是你在电脑里能看到的目录。
2、暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件
(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
3、版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库在这里插入图片描述
Git的三种状态:



①已提交(committed):表示数据已经安全的保存在本地数据库中

②已修改(modified):表示修改了文件,但还没保存到数据库中

③已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中

如果Git目录中保存着的特定版本文件,就属于已提交状态

如果作了修改并已放入暂存区域,就属于已暂存状态

如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态

初次接触:我的困惑关于master分支和develop分支区别

master分支和develop分支

  • 首先要知道master和develop并行。
  • master上始终是最稳定的代码,develop是正在开发的代码。

master分支:master分支只负责管理发布的状态。在提交时使用标签记录发布版本号。

develop分支:develop分支是针对发布的日常开发分支。刚才我们已经讲解过有合并分支的功用。


拓展案例:多分支A、B、C并行开发时合并策略

场景描述:

项目AB分支同时进行开发时,A分支开发过程中有其他分支B上线,并且B分支上线版本已同步(merge)到master,则须合并已上线版本到正在开发的分支A上,避免A分支上线时覆盖B分支的代码,导致功能倒退。

命令行合并步骤:

1.切换到开发分支A:

  • git checkout 【开发分支】

2.合并master到开发分支(因为B已经同步到master,于是将master合并到A,保证A上涵盖B以上线的最新代码):

  • git merge --no-ff master

3.将合并后代码推送到远程库:

  • git push origin 【开发分支】

五、个人开发常用命令

以下总结了Git常见的开发命令并进行了解释

git init : 初始化本地项目

  • 将本地项目初始化 git 项目,直观表现是在该项目同级目录下多了 .git 隐藏目录,其存储着 git 版本库相关信息.此后当前项目便具备了本地管理的能力,可以与 git 进行交互.

git clone : 克隆远程项目

  • 同 git init 一样的作用,也是创建本地仓库,只不过 git init 是直接将本地项目作为本地仓库,而git clone 是将远程项目克隆到本地并作为本地仓库. 由此可见,git clone 比 git init 多了一层远程仓库的概念.

git add : 添加文件

  • 将工作区的提交记录添加到暂存区,暂存区是工作区和版本库交互的桥梁,暂存区积累到一定量的提交记录时可以批量提交到版本库,这一点暂存区有点像缓存.

git commit : 提交文件

  • 将暂存区的版本提交到版本库,从而形成工作区->暂存区->版本库的基本链路,本地工作区的版本控制流程大致如此.

git push : 推送文件

  • 如果是使用 git clone 命令克隆的本地项目,当工作到一定程度时可能需要将这部分工作成果推送到远程仓库,这时候使用 git push命令完成本地版本的推送流程.

特殊情况

  • 如果是使用 git init命令初始化的本地项目,可能没有远程仓库,自然也就不需要推送.如果后来创建了远程仓库,那么你自然是想要将本地仓库推送到远程仓库的,因此你需要准确告诉 git 你要推送到哪个远程仓库.
  • 使用 git remote add origin git@github.com:username/repos.git ;命令添加远程仓库信息,这样就建立了本地仓库和远程仓库的关联,以后就可以正常推送到远程仓库了.

关于分支相关操作:

1、查看分支:git branch -a

2、创建分支,加上-b上创建完分支后,切换的新的分支工作:git checkout -b dev

这时候修改的文件都是在dev分支,不会对master分支的文件进行修改。

3、合并分支

  • git checkout master
  • git merge dev

The best investment is to invest in yourself

在这里插入图片描述

2020.05.14 记录辰兮的第64篇博客

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!