No Regrets.

git的基本操作详讲

Posted on By Marin



Git

git是一个分布式版本控制软件;

其安装教程可以自行Google

版本控制工具具有的功能:协同修改、数据备份、版本管理、权限控制、历史记录和分支管理;

git的结构



git的基本操作

设置签名

仓库级别/项目级别:
git config user.name XXX;
git config user.email XXX;

系统用户级别:登陆当前操作系统的用户范围:
git config-global user.name XXX;
git config-global user.email XXX;

基本操作

查看状态:
git status;

添加到暂存区:
git add [文件名];
git add . ——这是添加当前路径下所有文件;

提交到本地仓库:
git commit -m “日志信息” [文件名];
git commit -m “日志信息” ——提交暂存区所有文件;

提交到远程仓库:
git push [仓库地址] [分支名];

拉取远程仓库文件:
git pull [仓库地址] [分支名];

pull=fetch+merge;
git fetch [仓库地址] [分支名];
git merge [仓库地址] [分支名];

克隆:
git clone [仓库地址];

创建远程仓库别名:
查看别名:git remote -v;
创建别名:git remote add [别名] [仓库地址];

查看历史记录:
git log;
git log –pretty=oneline;
git log –oneline;
git reflog;

版本前进后退:
git reset –hard [历史索引值];
git reset –hard HEAD^——后退一个版本;
git reset –hard HEAD~n——后退n个版本;

比较文件差异:
git diff [文件名]——比较工作区文件与暂存区中保存文件的差异;
git diff [本地库中历史版本] [文件名]——比较工作区文件与本地仓库历史记录的差异;
git diff [本地库中历史版本]——比较多个文件与本地仓库历史记录的差异;

分支管理

在版本控制过程中,用多条线推进多个任务;
创建分支:
git branch [分支名];

查看分支:
git branch -v;

切换分支:
git checkout [分支名];

合并分支:
git merge [分支名];

git的基本原理

git底层采用的是SHA-1哈希算法,哈希算法可以被用来验证文件,前面讲到的diff命令就是利用了哈希算法进行验证和保证数据的完整性的,其原理如下:


git保存版本的机制:
像svn这种集中式的版本控制工具使用的文件管理机制是以文件变更列表的方式存储信息,每次记录文件的变化部分,通过把各个版本的变化信息都进行操作就得到了最新版本的内容;

git的文件管理机制是把数据看作是小型文件系统的一组快照,每次提交更新时git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,git不再重新存储该文件,而是只保留一个链接指向之前存储的文件;


提交对象:


提交对象及其父对象形成的链条:


分支管理机制:
分支的创建其实就是创建一个新的分支块指向链条;


分支的切换其实就是改变HEAD块的指向;


git工作流

在项目开发过程中使用git的方式;
分类:
1、集中式工作流:以中央仓库作为项目所有修改的单点实体。所有修改都提交到master这个分支上;
2、gitflow工作流:通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅,这是我们实际开发中最常用的,也是大型项目非常必要的结构;
3、forKing工作流:在gitflow的基础上,充分利用git的fork和pull request的功能以达到代码审核的目的;

gitflow工作流

分支种类:

主干分支(master)
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。

开发分支(develop)
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

bug修理分支(hotfix)
主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。

准生产分支(预发布分支)(release )
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集 成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后 可以视情况删除。

功能分支(feature)
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支 中独立出来。开发完成后会合并到开发分支。





有Marin的地方就有你的收获