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 ...
随机推荐
- 第一周嵌入式程序设计(linux环境下)的学习总结
2014025641 <嵌入式程序设计>第1周学习总结 本周学习内容 首先我们先复习下之前学习过的内容,什么是linux? Linux 就是一个操作系统,就像你多少已经了解的 Window ...
- image-to-image translation with conditional adversarial networks文献笔记
Image-to-Image Translation with Conditional Adversarial Networks (基于条件gan的图像转图像) 作者:Phillip Isola, J ...
- Python_day1 Learning record
Python Day1 Learning record(python第一天学习记录) 一.ptyhon安装 windows .下载安装包 https://www.python.org/download ...
- 东芝L10安装Centos5.5
为什么安装5.5:因为高版本的需要PAE设定但是老电脑不支持,偶又不想重新编译内核,so... 1. 安装之前需要把电脑格式化(我是整机安装Linux),否则会报not enough space l ...
- TCPIP学习笔记
TCP的连接 状态变化 各个状态的意义如下: LISTEN - 侦听来自远方TCP端口的连接请求: SYN-SENT -在发送连接请求后等待匹配的连接请求: SYN-RECEIVED - 在收到和发送 ...
- Sublime使用及配置C编译器
一.环境配置 在安装了MinGW+Gcc的基础上做如下设置—— 新建编译系统c.sublime-build: { "cmd" : ["gcc", "$ ...
- python del关键字的用法
del Keyword 注意del是python关键字,就像def.and.or一样.它不是字典.列表的方法,但是可以用来删除字典.列表的元素.比如: del list_item[4] del dic ...
- python学习第一次笔记
python第一次学习记录 python是什么编程语言 变成语言主要从以下几个角度进行分类,编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 1.1编译型与解释性 编译型:一次性将 ...
- shell 删除颜色代码
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
- Android方法引用超过65535的解决方式
//在app/build.gradle android { compileSdkVersion buildToolsVersion "24.0.1" defaultConfig { ...