下面这篇写的非常好。git分支介绍,有图。好好看这一篇,就懂了:

http://www.open-open.com/lib/view/open1328069889514.html

该系列还有不少文章,在页面下面的列表里,有时间可以看看(Todo)。

下面是一些笔记:

通过此语法,你可以把本地分支推送到某个命名不同的远程分支:若想把远程分支叫作awesomebranch,
可以用 git push origin serverfix:awesomebranch 来推送数据 (本地serverfix,远程awesomebranch)。
比如某些项目你不是维护者,但想帮点忙的话,最好用衍合:先在自己的一个分支里进行开发,当准备向主项目提交补丁的时候,
根据最新的origin/master 进行一次衍合操作然后再提交,这样维护者就不需要做任何整合工作
(译注:实际上是把解决分支补丁同最新主干代码之间冲突的责任,化转为由提交补丁的人来解决。),
(主干维护者)只需根据你提供的仓库地址作一次快进合并,或者直接采纳你提交的补丁。
呃,奇妙的衍合也并非完美无缺,要用它得遵守一条准则:
一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。
如果你遵循这条金科玉律,就不会出差错。否则,人民群众会仇恨你,你的朋友和家人也会嘲笑你,唾弃你。 在进行衍合的时候,实际上抛弃了一些现存的提交对象而创造了一些类似但不同的新的提交对象。如果你把原来分支中的提交对象发布出去,
并且其他人更新下载后在其基础上开展工作,而稍后你又用git rebase 抛弃这些提交对象,把新的重演后的提交对象发布出去的话,
你的合作者就不得不重新合并他们的工作,这样当你再次从他们那里获取内容时,提交历史就会变得一团糟。
如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些尚未公开的提交对象,就没问题。
如果衍合那些已经公开的提交对象,并且已经有人基于这些提交对象开展了后续开发工作的话,就会出现叫人沮丧的麻烦。

下面是一些从文中摘录出的能够帮助理解的图:

几个注意点:

1. 修改了文件的时候,必须要 git add,不add的话commit提交的文件就不对。git add 和 git stage是一个意思,是把文件提交到中间的stage区(注:git文件有三个区:working, stage, repository).

可以用 git diff --cached 或 git diff --staged 来查看stage中的文件diff,两个命令同一个意思。

2. 这篇文章讲了比较详细的和远程repository冲突的问题。

http://www.cnblogs.com/cj2014/p/5557654.html

当没有对本地进行 git fetch 或 git pull的时候(git pull = git fetch + merge to local,而git fetch指的是同步到本地repository,而不是working directory),如果远端有改动,本地也有改动,就会发生冲突,就要进行冲突解决。

一般来讲,都是需要人为解决的。

解决的方法就是 git pull, add, commit, mergetool等命令的组合。

1). git pull: 提示冲突

    2). 提交(git add --all; git commit)

    3). git pull

    4). git mergetool

    5). git pull
6). git commit
[216-fixed-area-walk d228a46] Merge branch '216-fixed-area-walk' of 192.168.1.51:IGV/IGV01-SW into 216-fixed-area-walk 7). git add --all
8). git commit
9). git push origin 216-fixed-area-walk

再复习一下普通的提交到远端的方式(注意不要忘了git add)

1. git pull

2. git add --all

3. git commit

4. git push origin 216-fixed-area-walk

下面这篇文章写的不错:

http://blog.csdn.net/kesenhoo/article/details/7654351

分布式版本控制系统( Distributed Version Control System,简称 DVCS )面世了。在这类系统中,诸如Git,Mercurial,Bazaar 还有 Darcs 等,
客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。

文章列表在这里:

http://blog.csdn.net/kesenhoo/article/category/1165624

git分支的介绍(但是图不清楚),其实复制了第一篇文章,可以忽略:

http://blog.csdn.net/wh_19910525/article/details/7470964

里面提到:Git 又是如何创建一个新的分支的呢?答案很简单,创建一个新的分支指针。

在 Git 中,它是一个指向你正在工作中的本地分支的指针(译注:将 HEAD 想象为当前分支的别名。)。

关于fast-forward, no-ff, squash等的解释,下面写的不错

http://blog.csdn.net/chen930724/article/details/50174657

fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。
因为在这个过程中没有创建commit squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,
于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。 --no-ff指的是强行关闭fast-forward方式。

[Todo] Git & 版本控制学习的更多相关文章

  1. linux Git版本控制学习与Git服务器搭建

    来源地址 要随时掌握工作区的状态,使用git status命令. 如果git status告诉你有文件被修改过,用git diff可以查看修改内容. 初始化一个Git仓库,使用git init命令. ...

  2. 学习使用Git 版本控制 代码管理

    title: 学习使用Git 版本控制 代码管理 notebook: 经验累积 tags:Git --- Git 版本控制 学习教程 Git版本控制器,可以作为程序员.计算机科学和软件工程的研究人员在 ...

  3. Git版本控制工具学习

    Git代码管理工具学习 分布式管理工具:git 相比较svn它更加的方便,基本上我们的操作都是在本地进行的. Git文件的三种状态:已提交,已修改,以暂存. 已提交:表示文件已经被保存到本地数据库. ...

  4. GIT 版本控制常用命令学习汇总

    GIT 版本控制常用命令汇总 git version 查看当前git版本信息 git help 获取全部命令帮助信息 git help <command> 获取指定命令帮助信息 git c ...

  5. Git 版本控制工具(学习笔记)

    GIT(分布式) 一.Git 初始版本控制工具 1. 安装Git Ubuntu系统下,打开shell界面,输入: sudo apt-get install git-core  之后回车输入密码,即可完 ...

  6. git gui 学习

    目的 自己以前使用过3,4个月的SVN,因为公司使用的是git,git gui.所以打算自学git gui,并记录一下学习心得.^_^ 原因 为什么不是学命令行而是用git gui呢.我觉得首先因为公 ...

  7. Git 操作 学习资源 网址

    用git 有一段时间了,有点自己的小心得.个人觉得相对SVN来讲他更灵活,更合理. 陆陆续续的收集了一些学习资源: 1.理解Xcode 中的Git 版本控制 http://www.open-open. ...

  8. Git版本控制工具(三)----远程仓库GitHub的使用

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. git版本控制工具(二)----本地版本库的常用操作

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

随机推荐

  1. 高性能网络服务器--I/O复用 select poll epoll_wait之间的区别

    一.select select采用的是集合的方式,最多只能访问1024个套接字.可读,可写,异常,三种访问,并且采用的是轮训的方式进行每次访问都需要从内核向用户空间拷贝 二.poll poll采用的是 ...

  2. LeetCode212. Word Search II

    https://leetcode.com/problems/word-search-ii/description/ Given a 2D board and a list of words from ...

  3. 都是干货---真正的了解scrapy框架

    去重规则 在爬虫应用中,我们可以在request对象中设置参数dont_filter = True 来阻止去重.而scrapy框架中是默认去重的,那内部是如何去重的. from scrapy.dupe ...

  4. Search in Rotated Sorted Array I&&II——二分法

    Search in Rotated Sorted Array I Suppose a sorted array is rotated at some pivot unknown to you befo ...

  5. 封装CSS动画

    写在前面:感谢腾讯课堂与妙味课堂的移动端公开课 对于需要设置动画的元素需要提前设置css()样式,这样数据才会被记录起来. function css(ele, attr, val) { if (/ro ...

  6. EL表达式无法显示Model中的数据

    后台程序通过Debug都能正常返回数据并封装到Model中.而在前台通过EL表达式取值时却是原样输出,如${cart.num}... ///展现我的购物车 @RequestMapping(" ...

  7. 二:Ionic Framework支持Android开发

    首先安装ionic,在使用npm下载ionic和cordova的过程中有问题可以使用淘宝的npm镜像,具体的方法可以参考网络 npm install -g ionic cordova 其他还需要安装J ...

  8. DaemonSet

    What is a DaemonSet? DaemonSet能够让所有(或者一些特定)的Node节点运行同一个pod.当节点加入到kubernetes集群中,pod会被(DaemonSet)调度到该节 ...

  9. JS内存管理与垃圾回收

    内存分配 var n = 374; // 为数字分配内存 var s = 'sessionstack'; // 为字符串分配内存 var o = { a: 1, b: null }; // 为对象及其 ...

  10. [转载]开发 Spring 自定义视图和视图解析器

    原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...