Git 分支
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链
分支 指向某一个特定的提交,不同的分支可以指向同一个提交,此时它们是相同的;不指向一个提交的分支,按提交的顺序排序,指向提交靠前的分支在指向提交靠后的分支前面;由于不同的分支都可以提交新的提交,这些就打乱原来链状的提交,开成分叉,这时回到原来的分支,需要合并,丢弃不用分支要删除,当然首先得创建分支。
X-k_@HK ~/Desktop/Hk (master)
$
windows 下的 Git 的命令行除了当前仓库的路径,后面的括号里显示的就是当前分支
master 是 Git 默认创建的分支,在第一次提交或克隆自动创建
git branch name 创建分支,下面创建 dev 分支
$ git branch dev
查看分支,带 * 的是当前分支
$ git branch
dev
* master
切换分支
$ git checkout dev
Switched to branch 'dev'
现在可以在 dev 分支上开发,待开发到一定程度时,没什么BUG,比较稳定时,可以合并到主分支上。
e.g
在 dev 分支修改 t.c (添加一行 "float c;")后提交,切回 master 分支合并到 master 分支。
git merge dev 把 dev 合并到当前分支
$ git commit -a -m float
[dev 06a9033] float
1 file changed, 1 insertion(+)
$ git status
On branch dev
nothing to commit, working directory clean
$ git checkout master
Switched to branch 'master'
$ git merge dev
Updating 11891ac..06a9033
Fast-forward
t.c | 1 +
1 file changed, 1 insertion(+)
$ git log --format="%h %s" --graph
* 06a9033 float
* 11891ac add t.c
* 9201c98 update readme.md
* 2e07671 first commit
现在提交还在一条链上,合并只是把 master 分支的指向 dev 分支指向的提交
那么现在试下在 master 分支和 dev 分支同时修改 t.c 并提交,然后合并,看看会发生什么
在 master 分支修改 float > long,提交 ‘long’
$ git log --format="%h %s" --graph
* a779b07 long
* 06a9033 float
* 11891ac add t.c
* 9201c98 update readme.md
* 2e07671 first commit
在 dev 分支修改 float > double ,提交 ‘double’
$ git log --format="%h %s" --graph
* 87531a3 double
* 06a9033 float
* 11891ac add t.c
* 9201c98 update readme.md
* 2e07671 first commit
dev 合并到 master 分支
$ git merge dev
Auto-merging t.c
CONFLICT (content): Merge conflict in t.c
Automatic merge failed; fix conflicts and then commit the result.
合并遇到冲突,此时 Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: t.c
no changes added to commit (use "git add" and/or "git commit -a")
Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:
int a;
int b;
<<<<<<< HEAD
long c;
=======
double c;
>>>>>>> dev
"这表示 HEAD 所指示的版本(也就是你的 master 分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(======= 的上半部分),而 dev 分支所指示的版本在 ======= 的下半部分。
保留了其中一个分支的修改,并且 <<<<<<< , ======= , 和 >>>>>>> 这些行要完全删除了。"
修复后,正常提交就可以了,这时的历史是这样的
$ git log --format="%h %s" --graph
* 0451275 merge
|\
| * 87531a3 double
* | a779b07 long
|/
* 06a9033 float
* 11891ac add t.c
* 9201c98 update readme.md
* 2e07671 first commit
最后的选项 --graph 添加了一些ASCII字符串来形象地展示分支、合并历史
现在 dev 分支没有了,就可以删掉了
$ git branch -d dev
Deleted branch dev (was 87531a3).
如果无法删除,可以尝试使用 -D 强制删除
git branch 还可以用选项 -a 查看全部分支(包括远程分支),
-v 查看分支和分支最后一次提交
高级参考
- 分支Git Git 分支 - 分支简介
- 分支合并 Git 分支 - 分支的新建与合并
- 高级合并 Git 工具 - 高级合并
- 分支开发工作流参考 Git 分支 - 分支开发工作流
Git 分支的更多相关文章
- Git分支管理
一.Git分支的使用 查看分支: git branch 创建分支: git branch branch1 切换到branch1 git checkout branch1 再用git branch查看, ...
- Git分支的前世今生
摘自Jack__CJ CSDN博客,写得很好,保存一下. 导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系 ...
- GIT分支管理模型
GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...
- Git详解之三 Git分支
相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...
- git初体验(三)git分支
分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...
- 如何在终端实时展现git分支
在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把.这里面存在两个内容,第一个bash,第二个是git bash基础: 了解到linux的shell存在 ...
- php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...
- 开发与测试整体过程中的Git分支merge流程
开发与测试整体过程中的Git分支merge流程 Git分支merge之开发流程 首先在Gitlab上有个仓库存储着原始的项目代码,其中包含一个叫master的分支.然后可能按功能进行分配,由不同的开发 ...
- Git 分支管理是一门艺术
转载: Git 分支管理是一门艺术 1 要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码. 2 "辅助分 ...
随机推荐
- java模式-工厂模式
今天在学习工厂模式,从最简单的简单工厂模式开始. 我们现在需要通过工厂Factory生产A,B两款产品(都是产品,实现了接口Product). 产品A: public class A implemen ...
- 渗透测试工具Nmap从初级到高级使用教程
本文由阿德马翻译自国外网站,请尊重劳动成果,转载请注明出处,谢谢 Nmap是一款网络扫描和主机检测的非常有用的工具.Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器.它 ...
- 微信小程序-上传下载
wx.uploadFile(OBJECT) 上传 将本地资源上传到开发者服务器.如页面通过 wx.chooseImage(图片)/wx.chooseVideo(视频) 等接口获取到一个本地资源的临时文 ...
- 相机位姿估计0:基本原理之如何解PNP问题
关键词:相机位姿估计 PNP问题求解 用途:各种位姿估计 文章类型:原理 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-18 @Lab: CvLa ...
- CodeUI Test:UIMap录制文件分析一
UIMap文件是Coded UI Test的核心文件,它分为三个文件. 1.UIMap.uitest 这是xml文件,里面描述了所有需要操作的目标控件以及进行操作的动作等. 2.UIMap.Desig ...
- Vim 常用技巧:
Vim 常用技巧: 将回车由默认的8个空格改为4个空格: 命令:set sw=4 修改tab为4空格: 命令:set ts=4 设置每一级的缩进长度: 命令:set shiftwidth=4 设置文件 ...
- springmvc 添加Junit4
junit 单元测试的好处我就不赘述了,本文旨在介绍自己使用的一个方式: 1.添加依赖 <dependency> <groupId>junit</groupId> ...
- thinkphp发邮件失败原因
使用phpmailer出现连接失败, 代码是别人已经封装好的没有问题,可能原因有如下. qq提示: SMTP server error: mail from address must be same ...
- Head First 设计模式-- 总结
模式汇总:装饰者 :包装一个对象以得到新的行为状态 :封装了基于状态的行为,并使用委托在行为之间切换迭代器 :在对象的结合中游走,而不暴露集合的实现外观 :简化一群类的接口策略 :封装可以 ...
- IDEA建立---- java web项目
1.新建一个javaweb项目 2.给项目命名 3.建立完的项目结构大概是这样(在web 下新建 两个目录lib 和 classes) 4.找到project Structure---------&g ...