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 ...
随机推荐
- Applet
Applet简介: 可以翻译为小应用程序,Java Applet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页中,并能够产生特殊的效果.包含Applet的网页被称为Java-po ...
- 关注Yumiot公众号,了解最新的物联网资讯
Yumiot,专注于物联网行业,每天不定期推送最新的物联网行业新闻.详情请用微信搜索关注 yumiot .
- Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...
- Java 平时作业五
使用 I/O 流和文件对象实现目录备份功能. package asg5; import java.io.File; import java.io.FileInputStream; import jav ...
- JSP学习(2)---四种基本语法与三种编译指令
JSP的异常可以不处理,即使是checked异常. 四种基本语法: jsp声明,jsp注释,jsp表达式,jsp脚本 三种编译指令: page,include,taglib 下面是具体的练习. sho ...
- css中width:auto和width:100%的区别是什么
width的值一般是这样设置的: 1,width:50px://宽度设为50px 2,width:50%://宽度设为父类宽度的50% 3,还有一个值是auto(默认值),宽度是自动的,随着内容的增加 ...
- 第一章 Java入门
一.JAVA的特点 简单.面向对象.平台无关.多线程.动态 (平台无关的原因:在操作系统上再提供JRE,只要提供JRE,JAVA编写的软件就能运行) 二.JAVA平台 JAVA SE(标准版).JAV ...
- LINUX 学习笔记 账号与群组的管理
LINUX 账号与群组的管理 UID:UserID 保存文件:/etc/passwd GID:GroupID 保存文件:/etc/group /etc/passwd 文件结构 一行代表一个账号,里面还 ...
- JAVA作业三
(一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Gr ...
- python判断两个变量是否为同一数据类型
>>> a = 1000>>> b = 1>>> isinstance(a,type(b))True>>>