我是辰兮,很高兴你能来阅读,这篇文章是我初学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篇博客
来源:oschina
链接:https://my.oschina.net/u/4405256/blog/4280322