Git学习笔记(4)--分支

几乎所有版本控制系统都以某种形式支持分支。分支允许你从开发主线上脱离下来,再不影响主线的情况下完成你的工作或者实现你的idea。与很多版本控制系统比起来,Git的分支操作非常迅速。这使得Git从分布式版本控制系统中脱颖而出。

这里再次推荐童鞋先看看这篇文章,以对Git的工作组成和分支概念有直观的了解
[url=http://roclinux.cn/?p=2129]《Git分支管理是一门艺术》[/url]

[b]分支的概念[/b]
了解分支前,我们需要了解提交commit这个概念,每个提交可以简单的理解成为一个快照。多次提交可以构成一个线性结构,1->2->3->...,类似单链表,一般的你可以把这条直线看作你的主分支--稳定版。
而分支相当于指向某个commit的分支,一般的,系统会自动使用master作为分支的默认名字,他指向最后一次提交。当你在master分支上的时候,每次你提交的时候,他都会随着你的commit前移,永远指向最新的。
当你创建新的分支test的时候,就像当与在此线性结构上开出一条新的走向,从单链表变成树,当你再次提交时,这个新的分支指针test会随着提交前移,就像之前的master一样。你可以切换回master,或者在test上再次创建分支,随着你不断创建分支,这个树的结构会变得非常复杂。甚至到难以解读的程度,因此,在正式工作时,一定要谨慎创建分支,每个分支的作用都要记清楚并在合适的时间与主分支合并。

你可以使用这个命令查看分支

git branch 查看分支
git branch -r 查看远程分支
git branch -a 查看所有分支
git branch --no-merge 查看所有未合并分支
git branch --merge 查看所有已经合并的分支

[b]分支的创建,删除和切换[/b]
你可以用如下命令创建分支

git branch <newbranch>

切换到新的分支

git checkout <newbranch>

或者直接使用这个命令创建并切换到新分支

git checkout -b <newbranch>

你可意识用如下命令删除分支

git branch -d <newbranch>

但是未合并的分支不能使用这个命令来删除
如果你坚持删除未合并的分支,可以用这个命令

git branch -D <newbranch>


[b]分支的合并[/b]
分支的合并可以将你的开发成果加入到产品中,合并的成功与否至关重要。因此Git对这部分非常重视。你可以使用这个命令将目标分支合并到当前分支(!!注意,是合并"到"你现在所在的分支)

git merge <destbranch>

举个例子,首先确认自己在master分支上,创建文件test,输入内容"2",提交,我建立并切换到分支test,向文件末尾输入内容"567",提交,切换回分支master,在文件末尾输入内容234.提交。此时合并,命令如下

#git checkout master(如果你不在master上)
#echo "2">test
#git commit -a -m "init"
#git checkout -b test
#echo "567">>test
#git commit -a -m "bemergedbranch"
#git checkout master
#echo "234">>test
#git commit -a -m "mergebranch"
#git merge test
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
#git status
# On branch master
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: test
#
no changes added to commit (use "git add" and/or "git commit -a")

查看test内容

#cat test
2
<<<<<<< HEAD
234
=======
567
>>>>>>> test
可以看到以下三个分隔标志
<<<<<<< HEAD
=======
>>>>>>> test
这个内容简单明了,我就不多说了,合并时只需删除这些,并留下想要的内容即可。
比如,我觉得主分支上的内容比较合适,因此我删除
<<<<<<< HEAD
=======
>>>>>>> test
567
只留下
234

运行git merge
# On branch master
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: test
#
no changes added to commit (use "git add" and/or "git commit -a")

使用add将其提交
#git add test

一切ok了。从这里我们可以看到分支合并还是基于变化的,如果你先修改test,然后回到分支master,不修改master直接合并,那么可以看到分支会被直接合并掉。就算你把2改成3,4,5...这个很容易理解,就不多说了。
[b]mergetool[/b]
重磅推出mergetool,一个神奇的工具。mergetool是一个可视化的工具。
输入命令

#git mergetool
最开始,他会让你选择使用什么工具,你可以选择适合自己的工具。
merge tool candidates: meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis emerge vimdiff
Merging the files: test

Normal merge conflict for 'test':
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (meld):
test seems unchanged.

我这里用的是默认的meld,meld的界面如下
[img]http://dl.iteye.com/upload/attachment/563029/10a2214d-7027-3643-8947-e259e16f5ec7.png[/img]
修改过程一样,但是关系更加分明。

[b]衍合[/b]
衍合的原理是回到两个分支的共同祖先,提取你所在分支每次提交产生的差异,然后将这些差异保存成临时文件(差异补丁文件,很好理解吧),然后从当前分支转换到你需要衍合入的分支,依序使用每个差异补丁文件。
频繁的衍合会极大的方便你的工作,但是请不要将它衍合进你的稳定版本。
关于衍合的妙用我体会的还不是很深。请有经验的童鞋指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值