目录

简介

  • Git是目前世界上最先进的分布式版本控制系统(没有之一)。
  • Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!
  • 很遗憾,接触2年+的Git,今天才稍微深入分析。

命令

  • git config

    • 配置git
    • git config --global user.name "Never、C" // 配置用户名
    • git config --global user.email cao@never.cn // 配置邮箱
  • git init
    • 创建版本库
  • git status
    • 查看 工作区(untracked) 和 暂存区(stage) 状态
    • git status -s // 精简模式查看
  • git add
    • git add . | git add --all // 添加当前所有修改到暂存区
  • git reset
    • git reset HEAD . // 将暂存区文件移除,不修改文件本身内容
    • git reset --hard xx // 还原到历史提交记录
    • git reset --merge // 撤销本次合并
    • git reset --hard HEAD^ // 回到上个版本,会修改文件内容
  • git commit
    • 提交到版本库
    • git commit -m xx // 带注释提交
  • git checkout
    • 从xx处检出文件
    • git checkout -- . // 将工作区文件还原为暂存区中最近的内容(暂存区无,则与版本库一致)
    • git checkout xx // 切换到分支xx
    • git checkout -b xx // 创建并切换到分支xx
  • git log
    • 查看历史记录
    • git log --oneline // 单行显示git记录
    • git reflog // 查看'未来'操作
  • git merge
    • 合并分支
    • git merge xx // 从xx分支合并到当前分支
  • git stash
    • 储藏
    • git stash pop // 恢复储藏的修改
    • git stash list // 显示stash列表
  • git tag
    • 版本标签
    • git tag // 查看版本所有标签
    • git tag -m "xx" v1.0 // 创建版本为1.0的标签,注释为xx
  • git revert
    • 回到历史
    • git revert xx // 生成新的提交来回到历史记录xx的父级
  • git push
    • 推送到远程版本库
    • git push --tags // 版本库推送到远程库上
  • git rm
    • git rm --cached

      • git rm --cached -r . // 清空暂存区
  • git rebase
    • git merge 会生成一个新得合并节点,而rebase不会
  • git fsck
    • 检查当前版本库信息是否存在错误

工作流

  • 简介

    • 软件开发模型有常见的瀑布模型、迭代开发模型、以及最近出现的敏捷开发模型等不同的模型。
    • Git Flow重点解决的是由于源代码在开发过程中的各种冲突导致开发活动混乱的问题。
  • 分支
    • Git Flow模型中定义了主分支和辅助分支两类分支。
    • 主分支
      • 主分支是所有开发活动的核心分支。所有的开发活动产生的输出物最终都会反映到主分支的代码中。主分支分为master分支和development分支。
      • master
        • master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签(TAG)。
      • develop
        • develop分支是保存当前最新开发成果的分支。通常这个分支上的代码也是可进行每日夜间发布的代码(Nightly build)。因此这个分支有时也可以被称作“integration branch”。
      • 规范
        • 仅在发布新的可供部署的代码时才更新master分支上的代码
        • 每当有代码提交到master分支时,我们可以使用Git Hook触发软件自动测试以及生产环境代码的自动更新工作。
    • 辅助分支
      • 辅助分支主要用于组织软件新功能的并行开发、简化新功能开发代码的跟踪、辅助完成版本发布工作以及对生产代码的缺陷进行紧急修复工作。这些分支与主分支不同,通常只会在有限的时间范围内存在。
      • 辅助分支包括:
        • 用于开发新功能时所使用的feature分支;
        • 用于辅助版本发布的release分支;
        • 用于修正生产代码中的缺陷的hotfix分支。
      • feature(topic分支)
        • 从develop分支发起
        • 合并回develop分支 或 被抛弃
        • 命名:feature-*
        • 该分支可以保存在开发者自己的版本库,不强制要求在主版本库中。
      • release
        • 从develop分支派生
        • 合并回develop 或 master分支
        • 命名:release-*
        • 用于发布新的产品,允许小的修正,准备发布说明信息。通过在release分支处理,可以让develop分支空闲出来。
      • hostfix
        • 从master分支派生
        • 合并回master 或 develop分支
        • 命名:hostfix-*
        • 当生产环境遇到异常或严重问题,从master指定的tag派生hotfix分支修复。能够让负责新功能和bug修复人员并行工作。

[Tool] Git 使用 与 Git Flow的更多相关文章

  1. [Tool] 源代码管理之Git

    本节目录 什么是Git 什么是GitHub 安装Git GitHub之Repository GitHub之托管页面 常用Git 命令 什么是Git 由于现在的开发多人协同办公,因此出现源代码管理工具 ...

  2. Git:Git初体验——Git安装配置

    作为即将成为一个程序员的男人,一直在听别人说Git多好多好,之前也随便了解了一些,但是始终没有决心去学会.现在大四了,只有毕设和一门开学六七周只去过一次课的全员必修课外,也没有什么事情做,何不去做这些 ...

  3. Git 笔记二-Git安装与初始配置

    git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...

  4. 1 起步-Pro Git---VCS比较、git基本原理、git配置

    本地版本控制系统 集中化的版本控制系统 诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务 ...

  5. Git版本控制:Git高级教程

    http://blog.csdn.net/pipisorry/article/details/50669350 Git有很多命令行参数,使用起来非常方便.可以运行 man git log ,来看一下这 ...

  6. Git 学习之git 分支(三)

    Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的 ...

  7. Git 学习之git 起步(一)

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  8. 项目开发中git常用命令、git工作流、git分支模型

    #新建代码库git init # 在当前目录新建一个Git代码库git init [project-name] # 新建一个目录,将其初始化为Git代码库git clone [url] # 下载一个项 ...

  9. git init和git init -bare区别

    1 Git init  和 git init –bare 的区别 用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作.但别的用户在将更新push上来的 ...

随机推荐

  1. PHP三维数组拼装

    foreach ($records as $k => $v) { foreach ($records as $m => $n) { if ($v['days'] == $n['days'] ...

  2. SSH免密码(日志三)

    上一篇:JDK安装以及安装过程中出现的问题(日志二) 原理,就是RSA加密,含有公钥和私钥,具体言之,用公钥来确认请求人是否是私钥的持有人. 1, 2, 3, 4, ssh免密码过程中遇到的问题:需要 ...

  3. VM VirtrualBox 安装centos6.5后的网络设置

    小白学习linux(一) 本文只是介绍VirtrualBox安装centos完成后的网络设置: 每次用虚拟机装完centos后,捣鼓半天才能上网.熟话说的好,好记性不如烂笔头,写个随笔记录下设置过程, ...

  4. Python函数之lambda,内置函数,yield生成器等

    lambda 1,用于处理简单逻辑 2,自动返回数据(return) 单参数 >>> func2 = lambda a: a+1>>> result = func2 ...

  5. [刷题]算法竞赛入门经典(第2版) 6-8/UVa806 - Spatial Structures

    题意:黑白图像的路径表示法 代码:(Accepted,0.120s) //UVa806 - Spatial Structures //Accepted 0.120s //#define _XIENAO ...

  6. JWebFileTrans(JDownload): 一款可以从网络上下载文件的小程序(三),多线程断点下载

    一 前言 本篇博客是<JWebFileTrans(JDownload):一款可以从网络上下载文件的小程序>系列博客的第三篇,本篇博客的内容主要是在前两篇的基础上增加多线程的功能.简言之,本 ...

  7. jQuery选择器的分类

    jQuery选择器的分类 jQuery中有很多分类,大类分为四类,四类里面又分为很多小类,下面就为大家一一介绍,这些选择器的使用和好处,Me用的是jQuery1.8.3的版本 选择器都有哪四类?? 1 ...

  8. 用ajax写分页查询-----2017-05-17

    要写分页,首先你得清楚,一页你想显示多少条信息?如何计算总共显示的页数? 先说一下思路: (1)从数据库读取数据,以chenai表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...

  9. 什么是mybatis 为什么要使用my batis

    1.定义MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.2.使用原因MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用 ...

  10. 求序列的和,杭电0j-2058

    原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=2058 [Problem Description] Given a sequence 1,2,3,... ...