第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. 设计模式——Spirng_Bean工厂

    前言:对于简单工厂和抽象工厂都有自己的优点和缺点, 比如简单工厂,如果你需要实现的类过多,你最后会出现工厂泛滥的情况,没有有效的控制代码的可重复性.http://www.cnblogs.com/xia ...

  2. ZOJ 1709 Oil Deposits(dfs,连通块个数)

    Oil Deposits Time Limit: 2 Seconds      Memory Limit: 65536 KB The GeoSurvComp geologic survey compa ...

  3. MVCPager分页使用方法

    public ActionResult AdminUserList(UserListModel model) { var pagedList = _userService.SearchAdminUse ...

  4. EF Core 2.1 中的 Eager loading、Explicit loading和LazyLoading (转自MSDN)

    Entity Framework Core allows you to use the navigation properties in your model to load related enti ...

  5. Kubernetes对象模型

    原文发表于https://www.fangzhipeng.com/kubernetes/2018/10/13/k8s-object-model/ 欢迎访问我的方志朋的博客 Kubernetes对象 在 ...

  6. Deferred Lighting

    Deferred lighting separate lighting from rendering and make lighting a completely image-space techni ...

  7. Python 基础 变量和数据类型

    python 数据类型 一,整数,可以出来任意大小的整数. 如 1, 100, -8080,0 等等. 二,浮点数,浮点数也可以被成为小数. 三,字符串,字符串是以'' 或"". ...

  8. try...catch..finally..语句中,finally是否必须存在?作用是什么

    try { } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ } 1: ...

  9. js判断当前浏览器是否是源生app的webview

    有些时候,我们在开发过程中需要判断,当前页面被打开是否是处于源生的webview里面,或者NODEJS做服务器后端支持的时候,判断请求来源是否来至于源生webview里面被打开的页面请求GET/POS ...

  10. 使用Hbuilder开发IOS应用上架审核提示请指定用户在位置许可模式警报中使用位置的预定用途。

    使用Hbuilder开发IOS应用时,遇到上架App被拒的问题,被拒原因: 你的应用程序使用位置服务,但并没有按照iOS人机界面指南中的要求,在位置模式警报中阐明它的用途. 要解决此问题,请指定用户在 ...