第5章--Git

版本控制简介

VCS (version control system) 版本控制系统:记录若干文件的修订记录的系统,帮助查阅/回到某个历史版本

LVCS本地

CVCS集中式(Central) -- e.g SVN (subversion), CVS (concurrent version system)。

缺点,操作需要网络连接

DVCS分布式 distribute -- e.g git   大部分操作可以在本地进行

分支模型

分支:从目标仓库获得一份项目拷贝,每条拷贝都有和原仓库功能一样的开发线

分支模型(branching model)/工作流(workflow):一个围绕项目开发/部署/测试等工作流程的分支操作(创建/合并)规范集合

特性分支:每个人开发不同的产品特性,之后分别与主线合并

产品级的分支模型:

常驻分支:

production(master):默认分支 (产品分支):可发布的版本

development:从master分支创建:开发的分支

活动分支:

feature:从development分支创建:特性分支

hotfix:从master分支创建:线上bug修复 (在master分支(上线的产品)发现bug,创建hotfix分支进行修复,合并回master分支(同时也需要合并到development分支)

release:从development分支创建:产品正式发布(可能会在发布结束之后被删除,因此在release分支的更新需要合并到development分支,发布前会推送到master分支并打上相应的版本号,产品上线)

Git

git是一个基于内容寻址的存储系统(属于DVCS)

基本操作:

git help <command>/ git <command> -h/ git <command> --help/ man git-<command>

git config:配置git,在创建一个版本仓库之前就要完成的配置

git config --global user.name "..."

git config --global user.email ...

(配置级别:

--local:只影响本仓库(.git/config)

--global:影响到所有当前用户的git仓库(~/.gitconfig)

--system:影响到全系统的git仓库(/etc/gitconfig)

)

git init:初始化仓库,使当前目录成为一个git仓库

git status:查看当前git仓库的信息

git中的状态:

内容状态:

工作目录

暂存区

提交区

文件状态:

已跟踪

未跟踪

git add filename:跟踪文件

git add . :跟踪所有文件

.gitignore :在add时忽略匹配的文件,仅作用于未追踪的文件

git rm:从暂存区和工作目录中删除(并取消跟踪)

git rm --cached:从暂存区删除文件

git rm $(git ls -files --deleted):删除所有被跟踪,但是在工作目录被删除的文件

git commit:提交暂存区至提交区

git commit -a:提交工作目录至提交区

git log:显示提交记录

git log --oneline:以一行信息来显示每一个记录

git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset ...:特定格式显示

git config alias.shortname <fullcommand> :alias

e.g. git config -global alias.lg "log --color --graph --pretty............."

git lg 即可

git diff:工作目录与暂存区的差异

git diff -cached [<reference>]:暂存区与某次提交的差异,默认为HEAD(HEAD指向当前的提交)

git diff <reference>:工作目录与某次提交的差异

git diff <reference1> <reference2>:两次提交之间的差异

git checkout -- <file>:将文件内容从暂存区复制到工作目录(discard changes)

git reset HEAD <file>:将文件内容从上次提交复制到暂存区

git checkout HEAD -- <file>:将文件内容从上次提交复制到工作目录

分支操作:

git branch <branchName>:增加分支

git branch -d <branchName>:删除分支

git branch -v:显示现在所有的分支信息

e.g. git branch next:在HEAD指针上创建另外一个引用

(一个分支的引用只是一个文本文件(40字符的SHA-1编码)--git的分支是轻量级的

所有分支文件都存在/.git/refs/heads/下,每一个分支对应一个文件)

有了一个next分支后,使用git commit提交会发生什么呢?

创建一个提交对象,HEAD和master会向前移动一步(next不动,因为未切换到next分支上)

git checkout:用来移动HEAD(HEAD用于指向当前提交的版本),并会把当前的工作目录和暂存区恢复到移动到的版本,相当于是分支的切换

git checkout <branchName>;

git checkout -b <branchName>:直接创建一个分支并切换 -->git branch <branchName>; git checkout <branchName>

git checkout <reference>:将HEAD移动到任意引用上(可传入commit id/ tag)

当使用commit id移动HEAD时,如果该commit id没有branch的引用,则会出现detached head(不能写入,只能读取)

git checkout - :回到上一个分支

git reset commit_id:若要将当前分支回退到某个历史版本,三种方法:

git reset --mixed <commit_id>:(默认)将当前内容复制到暂存区

git reset --soft <commit_id>:保持暂存区和工作目录保持不变

git reset --hard <commit_id>:将当前内容复制到暂存区和工作目录

做完了版本回退,之前的提交就可能没有任何指针指向它了,便成为一个没有被索引的提交。如何重新找回呢?

git reflog:按顺序显示commit的信息,尽快回退,不断向前,信息可能被覆盖

表示捷径(不用commit的hash值)

A^:A的父提交

A~n:在A之前的第n次提交

git stash:保存当前的工作目录和暂存区的状态,返回一个干净的工作空间

git stash save 'msg':保存(隐藏的stash栈)

git stash list:查看stash栈中保存的记录

git stash apply stash@{number}:将记录重新恢复到工作目录上面

git stash drop stash@{number}:将记录从stash栈中删除

git stash pop <--> stash apply + stash drop top_record

git merge:合并分支

解决merge conflict:

edit the conflict source code; git add; git commit -m 'resolved';

git merge fast-forward -- 线性提交记录; git merge branchName --no--ff;

git rebase branchName:修剪提交历史基线,俗称“变基”。将分支线路上的节点按顺序添加到所在分支之后--线性

git rebase --onto:挑选一部分节点进行添加

e.g. git rebase --onto master 5751363:将commit id为5751363之后的节点添加到master分支上

git tag tagname commit_id:对某个提交设置一个别名

远程操作:

git支持本地协议,可以初始化一个本地的远程服务器(就可以不用github了)

git init ~./git-server --bare:将当前仓库初始化为一个裸仓库(没有工作目录--被动接收的作用)

git push:提交本地提交区到远程

e.g. git push dir/git-server master

配置远程映射,避免每次都输入长url:git remote

git remote add origin ~/git-server:将远程仓库别名origin映射到仓库

git remote -v:查看远程仓库信息

多人使用git时:(case study)

Jerry/master:git add f1; git commit; git push (abcd111)--> origin/master abcd111

Tom/master:git add f2; git commit; git push (abce222) -->不可push

需要先同步Tom/master和远程端的代码:git fetch(获取远程仓库的提交历史)

e.g. Tom:git fetch origin/master; git merge origin/master

then, git push origin master 即可提交到服务器

git pull = git fetch + git merge

完整获取远程仓库:git init(初始化) + git remote(配置仓库) + git pull(拉取到本地)

git clone remote_addr local_dir:克隆一个远程仓库作为本地仓库(= git init + git remote + git pull)

其他参考资料:

git简明指南:http://rogerdudler.github.io/git-guide/index.zh.html

Github教程:try.github.com

Pro Git:http://git-scm.com/book/zh/v1/

Git单元测验:https://my.oschina.net/iwinder/blog/779721

Git单元作业:

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第5章.Git的更多相关文章

  1. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

    第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...

  2. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

    第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/class ...

  3. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat

    第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...

  4. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第1章.Web应用开发概述

    第1章--Web应用开发概述 Web应用开发概述 浏览器-服务器架构(BS-architecture) browser/ App    ---- request ---->    server ...

  5. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第2章.HTTP协议简介

    第2章--HTTP协议简介 HTTP协议简介 Abstract: HTTP协议的特性,HTTP请求/响应的过程,HTTP请求/响应的报文格式等知识,最后会演示如何通过Chrome提供的开发者工具,去跟 ...

  6. Java后端开发工程师是否该转大数据开发?

    撰写我对java后端开发工程师选择方向的想法,写给在java后端选择转方向的人 背景 看到一些java开发工程师,对java后端薪酬太悲观了.认为换去大数据领域就会高工资.觉得java后端没有前途.我 ...

  7. Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 ...

  8. 【转】测试开发工程师必备软硬能力&高级测试开发工程师需要具备什么能力?

    对于测试的基本知识,可以查看软件测试相关书籍 对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_210 ...

  9. Android开发工程师面试题总结。android开发面试经验

    1:Android中五种数据存储方式分别是什么?他们的特点?     (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQ ...

随机推荐

  1. PAT——1001 害死人不偿命的(3n+1)猜想 (15)

    对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1? 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值. 输出格式:输出从n计算到1需要的步数. 输入样例 ...

  2. [转载] iOS应用程序的生命周期

    iOS应用程序的生命周期 2015-06-23 iOS大全 (点击上方蓝字,快速关注我们) iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些 ...

  3. WebApiClient.AOT.dll 调用api地址 -> 调用方法

    优点:简化api调用过程,WebApiClient.AOT.dll中的IHttpApi接口 缺点:只适用于内部服务之间的调用(没有验证过程) 1.继承IHttpAPi接口 public interfa ...

  4. UE4 Navmesh 室内导航设置

    我用的UE版本是4.14.1   系统:win10 64 前不久给样板房里面做了一个扫地机器人,导航设置让我头大了很久,度娘也没有用,最后在谷哥上有所感悟,现在给出本人的设置过程和解决方案. 一开始拖 ...

  5. 我的前端工具集(八)获得html元素在页面中的位置

    我的前端工具集(八)获得html元素在页面中的位置   liuyuhang原创,未经允许禁止转载 目录 我的前端工具集 有时候需要用点击等操作,来获取某元素在页面中的位置,然后在该位置添加某些操作 如 ...

  6. php中的引用

    $var1 = 'zhuchunyu'; $var2 = ""; function foo($vaa){ global $var1,$var2; if (!$vaa){ $var2 ...

  7. 【解决】could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

    在同一套环境中跑了很多个项目都是用 docker-compose的方式启动的,导致创建的自定义网络过多出现下面的报错 Error response from daemon: could not fin ...

  8. 了解jQuery并掌握jQuery对象和DOM对象的区别

    jQuery的优势: 开源--开放源代码 轻量级 强大的选择器 出色的DOM操作(对DOM元素的一个增删改查) 完善的Ajax,出色的浏览器兼容性,丰富的插件支持,完善的文档(说明书) 链式操作方式, ...

  9. Vue路由钩子 afterEach beforeEach区别

    ​ vue-router作为vue里面最基础的服务,学习一段时间,对遇到的需求进行一些总结 使用vue-cli作为开发前提 vue-router已经配置好了 路由写法 routes: [ { path ...

  10. ES5拓展

    一.JSON拓展 1.JSON.parse(str,fun):将JSON字符串转为js对象 两个参数:str表示要处理的字符串:fun处理函数,函数有两个参数,属性名.属性值 // 定义json字符串 ...