下面这篇写的非常好。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. 用eclipse运行项目时怎么设置虚拟机内存大小

    方法一: 打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击InstalledJREs,在右边选择前面有对勾的JRE,再单击右边的“Edit”按 ...

  2. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. react与mox-react的shouldComponentUpdate 理解

    react性能优化中,提到的就是通过 React.PureComponent 替换 React.Component 组件进行编程. 两个组件之间的不同主要就是PureComponent做了should ...

  4. websocket小荔枝

    关于websocket原理和好处请参考百度,这里只是代码. var ws = new WebSocket('ws://echo.websocket.org/'); ws.onopen = functi ...

  5. es6解构赋值总结

    数组的解构赋值 1.简单的赋值方式 2.多维数组解构赋值 3.默认值,只有当右边对应位置为undefined时候才会选择默认(null不属于undefined) 4.左右不对等,会相应的对号入座,没有 ...

  6. Interllij IDEA常用快捷键

    [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关 ...

  7. .net mvc禁用浏览器缓存

    我正在寻找方法来禁用 整个 ASP.Net MVC 网站 的浏览器缓存 我发现以下方法, Response.Cache.SetCacheability(System.Web.HttpCacheabil ...

  8. PTA L2-002 链表去重 团体程序设计天梯赛-练习集

    L2-002 链表去重(25 分)   给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉.即对每个键值 K,只有第一个绝对值等于 K 的结点被保留.同时,所有被删除的结点须被保存在另 ...

  9. python的vim的环境配置(后续慢慢补充进来)

    #vim ~/.vimrc set smartindent set smarttab set expandtab set tabstop= set softtabshtop= set shiftwid ...

  10. JS获取当前页面URL的方法

    1.JS获取当前页面URL的方法小结 ①. document.URL;                           http://localhost:81/Test/1.htm/id/12 ② ...