Demystify Git
Git虽然很时髦,但是不好学,不好用. 关键是不好理解. 本文用最通俗易懂又直观的方式,帮助大家理解git, git的内部组织, 基本概念,还有常用 的工作流程.
本文来自墙外. 习某某说:"贸易保护主义如同把自己关黑屋子,见不到阳光和空气",但是,和网上长城gfw比起来,那算什么?今天看到一个来自小黑屋外的视频,觉得不错,和大家分享一下。视频地址:https://www.youtube.com/watch?v=GYnOwPl8yCE




Git workflow
1. 简单的,称为github workflow, 一个main 线,每个developer自己一条线,短命,从main导出,通过pull request 合并到main. 参照:http://scottchacon.com/2011/08/31/github-flow.html
2. 复杂的,称为 git flow,两个以上主线,一个是develop 线(或叫next 线),一个master, develop线是集成线。所有的features (或称为topic 线) 线从develop导出,合并到此。develop线累积到一定程度后,master先分出一条release 线,其名字根据当前的master tag 来定,比如 release-1.2,然后,将dev合并到master (通常, dev 是master 的超集,所以,这个合并只会包括 fast-forward), 并tag master为 master-1.3。所以 master 其实也是一个release 线,只不它是最新的哪条release 线。在最新的release线(即master线)上的所有 fix都要合并回dev线,或许也合并到某些较旧的release 线,但是,在较旧的release线上的fix,不一定需要合并到dev线上,因为,dev线上可能已经没有那个feature了。 参照:http://nvie.com/posts/a-successful-git-branching-model/
Git Squash Method:
1. >git rebase -i HEAD~5 #squash last 4 commit,
edit the file to choose pick or squash
2. make sure index and working tree is clean
>git reset --soft HEAD~5 #head moved, index and working tree untouched
>git commit --edit -m"$(git log --format=%B --reverse HEAD~5..HEAD)"
3. make sure all stuff commited
>git reset --hard HEAD~5
>git merge --squash HEAD@{1} # HEAD@{1} is the previous head before reset --hard
>git commit
Move git branch head around
>git checkout commit #detached head
>git branch -f branch-name head #glitch: fail if current branch, the previous cmd avoid this.
Diff 控制
在 git diff --no-index 时, .gitignore 等的设置不起作用,有个解救,利用 .gitattributes 文件,例如, *.obj -diff ,
*.dll diff=nodiff
and
git config diff.nodiff.command /bin/true
or git config diff.nodiff.command echo
参 git manual gitattributes or config
注意,因为no-index 需要两个path, 所以 pathspec 方法(参git help glossary)不行 。
pathspec 方法例子:path/to/*.* :!*.obj 或等同的:path/to/*.* :(exclude)*.obj
Demystify Git的更多相关文章
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- [版本控制之道] Git 常用的命令总结(欢迎收藏备用)
坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
- git 命令
切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm ...
随机推荐
- springboot-mybatis多数据源以及踩坑之旅
首先,springboot项目结构如下 springboot配置文件内容如下 动态数据源的配置类如下(必须保证能被ComponentScan扫描到): 1 package com.letzgo.con ...
- 在eclispe上git 代码滚回
1.项目 - 鼠标右键 - team - show in history: 2.history窗口 - 选择需要回滚到的版本 - reset - hard:3.项目 - 鼠标右键 - team - p ...
- Linux系统的磁盘管理
Linux系统的磁盘管理有三个命令:df.du.fdisk. df:列出Linux中所有文件系统的整体磁盘使用量: du:对文件和目录所占用磁盘空间的查看: fdisk:用于磁盘分区时列出所有的磁盘. ...
- jmeter测试计划元素执行顺序
jmeter测试计划元素执行顺序 测试计划的元素是有序的,通过以下方式执行: 1–配置节点 2–前置处理器 3–定时器 4–取样器 5–后置处理器(只在有结果可用情况下执行) 6–断言(只在有结果可用 ...
- linux 增加虚拟内存swap(使用文件)
1.简介 如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择. 为了测试一些功能我在阿里云购买 ...
- Windows Server 2008系统
Windows Server 2008特点 1,可操作性 2,可管理性 3,可扩展性 4,可用性 5,安全性 Windows Server 2008提供两个最常用默认用户账户Administrator ...
- cf A Simple Task---线段树
Examples Input 10 5abacdabcda7 10 05 8 11 4 03 6 07 10 1 Output cbcaaaabdd Input 10 1agjucbvdfk1 10 ...
- web页面空白,无任何显示
解决前: 解决后: 原因:HTML代码有误,没有关闭script标签. 解决方法:加</script>
- SQL设置时间格式
SELECT STR_TO_DATE('Jul 20 2013 7:49:14:610AM','%b %d %Y %h:%i:%s:%f%p') from DUAL; -- 执行后得到结果:'2013 ...
- Python高阶函数和匿名函数
高阶函数:就是把函数当成参数传递的一种函数:例如 注解: 1.调用add函数,分别执行abs(-8)和abs(11),分别计算出他们的值 2.最后在做和运算 map()函数 python内置的一个高阶 ...