注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zorksylar

Nothing is impossible , if distributed.

 
 
 

日志

 
 

【Git】Git学习之Basic Branching and Merging  

2012-02-04 19:20:26|  分类: git |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
参考资料:
刚发现这个也有中文版的...
= = !
上面讲解的很详细,
只列出自己感觉比较重要的地方:

$ git checkout -b new_branch

表示,创建一个新Branch new_branch,并且转到这个Branch上,
相当于:

$ git branch new_branch

$ git checkout new_branch

上面推荐的网站上有一个很好的例子,讲述了如何正在编写一个信版本的时候,遇到了之前版本的一个Bug,需要修理这个Bug,修理之后还要保持新旧版本的一致性。

分支的合并

$ git merge branch_x

merge命令用来进行Branch的合并,
表示把当前的branch和branch_x合并,合并后,branch移动到branch_x上面。
如:
合并前:
【Git】Git学习之Basic Branching and Merging - sylareclipse - sylar
 

$ git checkout master

$ git merge hotfix

merge后:
【Git】Git学习之Basic Branching and Merging - sylareclipse - sylar
合并后hotfix就没有什么用了,可以删除

$ git branch -d hotfix


如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。

还有一种情况,就是不在一条线上的两个branch的合并:
如:合并下图中的master和iss53
【Git】Git学习之Basic Branching and Merging - sylareclipse - sylar
这次,Git 没有简单地把分支指针右移,而是对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)(见下图)。这个提交对象比较特殊,它有两个祖先(C4 和 C5)。
【Git】Git学习之Basic Branching and Merging - sylareclipse - sylar
 

遇到冲突时的分支合并

如果在不同的分支中都修改了同一个文件的同一部分,Git 就无法干净地把两者合到一起,产生冲突,
如:

$ git merge iss53

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

这时,Git 作了合并,但没有提交,它会停下来等你解决冲突。要看看哪些文件在合并时发生冲突,可以用 git status 查阅:
 

[master*]$ git status
index.html: needs merge
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# unmerged: index.html
#

unmerged 表示所有没有解决冲突的文件的状态

手工解决冲突:
打开冲突文件后

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时所切换到的分支)中的内容,下半部分是在 iss53 分支中的内容。解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:

<div id="footer">
please contact us at email.support@github.com
</div>

这个解决方案各采纳了两个分支中的一部分内容,而且我还删除了 <<<<<<<,======= 和 >>>>>>> 这些行。在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决
运行

$ git add index.html

后,冲突就算是解决了。

$ git commit -a

提交。


删除Branch

$ git branch -d branch_name


查看所有Branch

$ git branch -v

带*的表示当前所在的分支

一个图形化的Branch查看和管理工具

$ gitk


查看当前Branch的上游Branch

$ git branch --merged

查看哪些分支已被并入当前分支(译注:也就是说哪些分支是当前分支的直接上游。)
  评论这张
 
阅读(342)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018