`
mmdev
  • 浏览: 12932704 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

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

这里再次推荐童鞋先看看这篇文章,以对Git的工作组成和分支概念有直观的了解
《Git分支管理是一门艺术》

分支的概念
了解分支前,我们需要了解提交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 查看所有已经合并的分支

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

git branch <newbranch>

切换到新的分支

git checkout <newbranch>

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

git checkout -b <newbranch>

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

git branch -d <newbranch>

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

git branch -D <newbranch>


分支的合并
分支的合并可以将你的开发成果加入到产品中,合并的成功与否至关重要。因此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...这个很容易理解,就不多说了。
mergetool
重磅推出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的界面如下

修改过程一样,但是关系更加分明。

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

分享到:
评论

相关推荐

    Git-Pro 学习笔记 -xmind 打开

    提炼了各种Git 应用场景的命令和基础说明与分类,基本满足大型软件开发要求,我主要基于Android 系统开发,几百个git 仓库各种分支,合并。

    Git常用命令-学习笔记.zip

    Git工具命令学习笔记pdf,git各种命令,分支管理,远程仓库管理等等离线笔记

    vue、git 学习笔记

    git学习   git: 克隆Git到本地(建立文件夹):git clone https://xxx 建立分支:git checkout -b 新建分支 返回主题:git checkout master 提交全部 :git add . 提交命名:git commit -m ‘命名’ //提交,添加...

    Git学习笔记/常用命令总结

    Git常用命令的总结,适用于Git初学者和需要用到Git工具的开发人员。 内容包括: 1.Git安装配置 ...4.Git创建仓库 5.Git基本操作 6.Git分支管理 7.Git查看提交历史 8.Git标签 9.Git远程仓库 10.Git服务器搭建

    Git&GitHub;学习笔记

    协同修改  多人并行不悖的修改服务器端的同一个文件。  数据备份  不仅保存目录和文件的当前状态,还能够保存每一个提交过... 分支管理  允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

    git学习笔记

    分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%...但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。

    git-学习笔记(1)用git管理oschna的仓库

    我本人自己喜欢写写小程序,接触git是受朋友介绍,没有接触正规的培训。所以这个教程也适合与类似与我这种没有公司环境的人。我也是刚刚接触git仅能满足自己写代码备份,并分享到...对于分支和网上写作本教程不包含。

    gitLearn:git常用的命令

    Git 学习笔记 Git Gui 上那些常用的命令,因为通常是在command line 下操作的,这样就不用经常打开界面啦 merge的一个示例 命令:git merge remotes/origin/master 其它常用功能: 查看文件修改记录 查看简单提交...

    Git学习笔记

    安装Git配置文件配置用户信息查看配置信息Git工作流程工作流程图工作区、暂存区、版本库简单实用Git命令git initgit clonegit addgit statusgit diffgit commitgit reset HEAD查看历史提交分支管理创建分支切换分支...

    Git& GitHub gitlab学习笔记

    你可以在这里学习git与github\gitlab的用法,从克隆项目、创建分支、提交和同步修改,到合并分支请求的整套流程,团队协作、跨团队协作等等技能;让你从小白到大神;完爆代码管理工具,提升开发效率。

    Git进阶技巧:提升团队协作效率个人学习笔记.md

    本文介绍了Git的一些进阶使用技巧,包括分支管理、合并策略、钩子脚本等,旨在帮助读者提升团队协作中的代码管理效率,解决常见的问题和挑战。

    hello:git 笔记

    分支学习 一条完整的时间线作为一条分支,而最初始的分支被一般被称为 master 分支, 严格来说 HEAD 指向的是  当前分支,即正在操作的分支,所以当创建新的分支时,就会 HEAD 就会跑到操作分支上 git branch ...

    GutenbergRDF:古腾堡项目 RDF 目录文件的 Java 包装器

    古腾堡RDF GutenbergRDF...贡献分叉吧创建您的功能分支( git checkout -b my-new-feature ) 提交您的更改( git commit -am 'Add some feature' ) 推送到分支( git push origin my-new-feature ) 创建新的拉取请求

    gitLearn:这是我自己的git笔记。 该存储库仅用于学习,使我更方便地查找git CLI命令以及git基本核心概念。 使用Git v2.29.0(适用于macOS Catalina 10.15.6)

    Git Learn自主学习Git的观念和指令后做的统整&学习笔记目录修改Commit纪录如果有特定档案不想放在Git里面一起备份或是上传到Git Server的话,例如:资料库密码,云端伺服器的金钥...可以加入.gitignore中检视特定档案的...

    advanced-git-lesson:通过GitHub和RStudio学习高级git技术

    先进的git技术本课程使用GitHub和RStudio涵盖git中的高级主题。 主题包括派生,问题,拉取请求,分支以及创建用户和项目GitHub Pages。讲师笔记本课旨在补充和地方。 我们将此课程作为2020年10月7日“博士后数据科学...

    FunAndLearn:TopCoder Swift挑战-TableView和plist

    娱乐与学习TopCoder Swift挑战-TableView包含plist数据,后跟URL中的JSON数据挑战... 创建功能分支: git checkout -b my-new-feature 提交更改: git commit -am 'Add some feature' 推送到分支: git push origin my-

    notes-from-the-day:一本小日记让我追踪每天的进度或任何发现

    从一天开始的笔记。 这对我来说是一本小日记,用于跟踪每天的进度,学习情况或任何发现。 我记下了一些小片段,这些片段从2019年5月开始,我发现这些片段有助于提醒或仅用于设定起点。 由于我真的很喜欢不时地...

    learn-series:记录自己学习各种技术的总结笔记和代码

    目前正在同步整理下面这些学习笔记: Rollup.js 源码研究 WebAssembly 相关知识学习 V8 引擎源码研究 正则表达式学习总结 git深度使用总结 后面计划添加的学习笔记有: Flutter知识总结 搭建个人博客总结 vue-router...

    leetcode题库-EveryDay:前端基础个人博客学习笔记

    leetcode题库 EveryDay 如果觉得不错,点个star吧 ...Pages上的,使用jsdelivr以及cloudflare作为缓存缓解国内访问速度问题,在博客中的内容就相对比较多了,除了学习笔记之外还有一些做项目时的记录以

Global site tag (gtag.js) - Google Analytics