Git一张图

Git基本概念

Git不仅仅是版本控制系统,还是内容管理系统(CMS)、工作管理系统等。

Git与SVN区别:

  • Git是分布式的,SVN不是。
  • Git把内容按元数据方式存储,而SVN是按文件;所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn、.cvs等的文件夹里。
  • Git分支和SVN的分支不同。
  • Git没有一个全局的版本号,而SVN有。
  • Git的内容完整性要优于SVN。

仓库(Repository)

  • 线上版本仓库(这里称为:源仓库)

项目启动时,由项目管理者搭建起最原始的仓库,称 origin。

源仓库的有个作用 :汇总参与该项目的各个开发者的代码;存放趋于稳定和可发布的代码。

源仓库应该是受保护的,开发者不应该直接对其进行开发工作。只有项目管理者能对其进行较高权限的操作。

  • 开发者仓库 (独自、本地仓库)

    任何开发者都不会对源仓库进行直接的操作,源仓库建立以后,每个开发者需要做的事情就是把源仓库的“复制”一份,作为自己日常开发的仓库。这个复制是Gitlab上面的Fork。

每个开发者所Fork的仓库是完全独立的,互不干扰,甚至与源仓库都无关。每个开发者仓库相当于一个源仓库实体的影像,开发者在这个影像中进行编码,提交到自己的仓库中,这样就可以轻易地实现团队成员之间的并行开发工作。而开发工作完成以后,开发者可以向源仓库发送 Pull Request ,本地仓库先合并源仓库,解决冲突,再发起Merge Request请求管理员把自己的代码合并到源仓库中的develop分支,这样就实现了分布式开发工作和集中式的管理。

分支(Branch)

  • master branch:主分支

    master:主分支从项目一开始便存在,它用于存放经过测试,已经完全稳定代码;在项目开发以后的任何时刻当中,master存放的代码应该是可作为产品供用户使用的代码。所以,应该随时保持master仓库代码的清洁和稳定,确保入库之前是通过完全测试和code reivew的。master分支是所有分支中最不活跃的,大概每个月或每两个月更新一次(根据项目经理的开发进度,按照功能点进行merge),每一次master更新的时候都应该用git打上tag,来说明产品有新版本发布。

  • develop branch : 开发分支

    develop:开发分支,一开始从master分支中分离出来,用于开发者存放基本稳定代码。每个开发者的仓库相当于源仓库的一个镜像,每个开发者自己的仓库上有develop、test分支。开发者把功能做好以后,merge到test分支由测试人员进行测试,当测试完以后,开发人员在test分支进行bug修改,修改完成后,经由测试人员测试完成后,确认bug修改完成以后,由管理员在merge到develop之中,届时,可能会出现冲突,找到对应的开发人员进行merge,同时,将test的代码merge到master分支,发布一个新版本。

  • test branch : 测试分支

    test:测试分支,从develop分支中拉取出来,用于测试开发者提交的功能点。经测试完成后,交由对应开发人员在test分支进行bug修改,修改完成后,再次测试功能直到bug没有。届时,告诉管理员,由管理员merge到develop,同时merge到master分支,发布新版本。

注:任何人不应该向master直接进行无意义的合并、提交操作。正常情况下,master只应该接受经过test测试后的合并,也就是说,master所有代码更新应该源于合并test的代码。

Git工作流程

一般的工作流程:

  • 克隆Git资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

Git分支管理(branch)

创建分支命令:

git branch (branchname)

切换分支命令:

git checkout (branchname)

合并分支命令:

git merge

列出分支

列出分支基本命令:

git branch

没有参数时,git branch会列出你本地的分支。

删除分支

删除分支命令:

git branch -d (branchname)

分支合并

一旦某分支有了独立内容,终究希望将它合并到主分支,可使用git merge将任何分支合并到当前分支中去。

git merge

Git查看提交历史(log)

使用git log列出历史提交记录:

可以用–oneline选型来查看历史记录的简洁的版本。

git log --online

使用–graph选型,查看历史中什么时候出现了分支、合并。

git log --online --graph

使用 --reverse 来逆向显示所有日志。

git log --reverse --online

查看指定用户提交的日志可以使用命令:git log --author,如:

git log --author=XiaoMing --online -5

Git标签(tag)

如果项目达到一个重要的阶段,并希望保存这个阶段,可以使用git tag给它打上标签。

如:为test项目发布一个"1.0"版本,可以使用git tag -a v1.0命令给最新一次提交打上(HEAD)"v1.0"的标签。

-a选型意为“创建一个带注解的标签”。不用-a选型也可以执行,但它不会记录着标签什么时候打的,谁打的,也不会让你添加个标签的注解。

git tag -a v1.0

当执行git tag -a时,Git会打开你的编辑器,让你写一句标签注解。

如果想要查看所有标签可以使用命令:

git tag

协同合作中最常用的Git命令

本地使用Git,都需要先配置下自己仓库的邮箱和用户名,基本只使用一次。

  • git config --global user.email “you@example.com”
  • git config --global user.name “Your Name”

git commit、push、pull、fetch、merge含义与区别

  • git commit:将本地修改过的文件提交到本地库中。
  • git push:将本地库中的最新信息发送给远程库。
  • git pull:从远程获取最新版本到本地,并自动merge。
  • git fetch:从远程获取最新版本到本地,不会自动merge。
  • git merge:用于从指定的commit合并到当前分支,用来合并两个分支。
git merge -b   //将b分支合并到当前分支

git pull 相当于 git fetch + git merge。

常用命令

·  git clone <url> #克隆远程版本库
· git init #初始化本地仓库
· git status #查看下仓库的当前的状态
· git add <file> / . #跟踪指定文件或所有改动过的文件
· git commit -m "commit message" # 提交所有更新过的文件
· git log #查看提交历史日志
· git relog #查看所有操作记录日志,回退穿越很有用
· git reset --hard HEAD # 回退
· git pull <remote> <branch> # 拉取代码并快速合并
· git push <remote> <branch> # 推送代码及快速合并
· git fetch <remote> / --all # 获取指定远程仓库或所有远程仓库代码
· git merge <branch> # 合并指定分支到当前分支

遇坑填坑记录

如何解决failed to push some refs to git?

出错提示:git failed to push some refs to git……

git pull --rebase origin master
git push -u origin master

Git基本概念,流程,分支,标签及常用命令的更多相关文章

  1. git合并分支理解和常用命令的总结

    原文参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 工作区和暂存区 工作区 ...

  2. git中通过实际操作来了解常用命令

    基本的6个命令 常用的就下面6个命令,但是详细的可能有上百个命令. 还需要特别了解git的几个名词,workspace:工作区,Index/Stage:暂存区,Respository:本地仓库,Rem ...

  3. Git使用:安装,使用及常用命令整理

    对于程序猿而言,git是最常接触的工具之一,因此需要熟练快速掌握其技巧. git安装: windwos:  [原创]Windows平台下Git的安装与配置 Ubuntu:git与github在ubun ...

  4. Maven是什么? Maven的概念+作用+仓库的介绍+常用命令

    Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型.一组标准集合,一个依赖管理系统.和用来运行定义在生命周期阶段中插件目标和逻辑. 核心功能 Maven的核心 ...

  5. Git基础概念与Flow流程介绍

    目录 Git相关 基本概念 常见客户端 TortoiseGit Sourcetree Intellij Idea 命令行 常用命令 存储区域 命令之 add & commit &pus ...

  6. git入门 创建版本库, 版本管理 分支 标签

    参考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GIT最流行的分布式版本 ...

  7. Git&Gitlab开发流程与运维管理

    Git&Gitlab开发流程与运维管理 作者 刘畅 时间 2020-10-31 实验系统版本centos7.5 主机名称 ip地址 配置 安装软件 controlnode 172.16.1.1 ...

  8. git常用命令图解 & 常见错误

    Git 常用命令 基本命令 git clone.这是一种较为简单的初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份 git clone git://github.com/someon ...

  9. Git 常用命令及操作总结

    Git常用命令及操作总结 By:授客 QQ:1033553122 利用TortoiseGit克隆源码库到本地 1.安装TortoiseGit 2.打开Git,进入到源码库,点击图示红色选框框选按钮,弹 ...

随机推荐

  1. Alpha冲刺——汇总博客

    一.代码规范与计划 代码规范与计划 二.10篇冲刺随笔 冲刺随笔--Day1 冲刺随笔--Day2 冲刺随笔--Day3 冲刺随笔--Day4 冲刺随笔--Day5 冲刺随笔--Day6 冲刺随笔-- ...

  2. volatile 关键字精讲

    1.错误案例 通过一个案例引出volatile关键字,例如以下代码示例 : 此时没有加volatile关键字两个线程间的通讯就会有问题 public class ThreadsShare { priv ...

  3. 漫画|web的主要安全问题

    在此主要说现在市面上存在的4个比较多的安全问题 一.钓鱼 钓鱼: 比较有诱惑性的标题 仿冒真实网站 骗取用户账号 骗取用户资料 二.篡改页面 有一大部分被黑的网站中会有关键字 (在被黑的网站中,用的最 ...

  4. Java8接口的默认方法

    项目实战 实现上图接口的实现类有很多,其中有些实现类已经在生成环境了,现在需要新增几个实现类,都需要有回调方法,所以在接口中添加了一个回调的默认方法,如果使用接口的普通方法就得改所有实现了接口的实现类 ...

  5. [每日一题]面试官问:谈谈你对ES6的proxy的理解?

    [每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  6. 大厂面试官竟然这么爱问Kafka,一连八个Kafka问题把我问蒙了?

    本文首发于公众号:五分钟学大数据 在面试的时候,发现很多面试官特别爱问Kafka相关的问题,这也不难理解,谁让Kafka是大数据领域中消息队列的唯一王者,单机十万级别的吞吐量,毫秒级别的延迟,这种天生 ...

  7. Java并发包源码学习系列:详解Condition条件队列、signal和await

    目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaite ...

  8. 转发:[服务器]SSL安装证书教程

    [服务器]SSL安装证书教程   来自阿里云教程 Tomcat服务器安装SSL证书 安装PFX格式证书 https://help.aliyun.com/document_detail/98576.ht ...

  9. SAP里会话结束方法(杀死进程)

    在SAP的ERP里,有很多方法可以结束一个会话,然而在不同情况下,需要使用的方法也不同.下面从先后顺序来简单说明:1.SM04:最常用的方法,在SM04点击工具栏的会话->结束会话,来关闭一个会 ...

  10. Markdown里常用的HTML元素

    转义:\ 换行:<br/> 红色文字:<font color=#FF0000>字体改成红色了</font> A标签 新窗口:<a href="xxx ...