分支管理
-
每次提交,
Git
都将它们串成一条时间线,这条时间线就是一条分支。 -
最开始都有一条主分支--
master
分支 -
由
master
指向最新的提交,而HEAD
指向master
创建与合并分支
-
当创建新的分支时,切换到新的分支如
dev
,此时dev
指向master
相同的指向,HEAD
指向dev
-
此后
master
保持不变,每有一次新的提交,由dev
向前移动一步 -
当需要将
dev
合并到master
上时,最简单的方法是直接把master
指向dev
的当前提交 -
合并完成后,可以将
dev
删除,只保留主分支master
,删除dev
就是把dev
指针删除掉
# 查看分支
git branch
# 创建分支
git branch <name>
# 切换分支
git checkout <name>
# 切换分支
git switch <name>
# 创建+切换分支
git checkout -b <name>
# 创建+切换分支
git switch -c <name>
# 合并某分支到当前分支
git merge <name>
# 删除分支
git branch -d <name>
解决冲突
-
当
Git
无法自动合并分支时,就必须首先解决冲突。解决冲突后再提交,合并完成,就可以删除不必要的分支 -
解决冲突就是把
Git
合并失败的文件手动编辑成我们希望的内容,再提交。 -
git log --graph
可以看到分支合并图
分支管理
-
master
分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活 -
都在
dev
上干活,在发布新版本时,再将dev
合并到master
上 -
团队中的伙伴都在自己的分支上干活,时不时往
dev
上合并 -
合并分支时,加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并,而fast forword
合并就看出来
# 使用--no-ff模式,同时进行了commit,这样从分支历史上就可以看出分支信息
git merge --no-ff -m "merge with no-ff" dev
Bug分支
-
当在分支
dev
上工作时,需要处理master
的bug
,而dev
的工作还不想提交。可以通过git stash
来保存当前为提交的状态。 -
切换到
master
,新建分支更改了bug
并合并后回到dev
-
可以通过
git stash list
查看保存的所有状态-
可以通过
git stash apply
恢复,但是恢复后stash
内容并未删除,需要用git stash drop
删除 -
还可以通过
git stash pop
,恢复的同时把stash
内容也删了
-
-
在
master
上修复的bug
,想要合并到当前dev
时,可以通过git cherry-pick <commit>
命令,把bug
的修改同步到dev
中
Feature分支
-
开发一个新feature,最好新建一个分支;
-
如果要丢弃一个没有被合并过的分支,可以通过
git branch -D
强行删除。
多人协作
工作模式
-
首先,推送修改--
git push origin <branch-name>
-
如果推送失败,则代表远程的分支有所更新,需要先通过
git pull
-
如果合并有冲突,则解决冲突,并在本地提交
-
没有冲突或解决后,在通过上述方法推送
-
如果
git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/<branch-name>
。 -
查看远程库信息--
git remote -v
rebase
操作
-
rebase
操作可以把本地未push的分叉提交历史整理成直线; -
rebase
的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
原文地址:https://www.cnblogs.com/ashen1999/p/12559927.html
- R语言中的非线性分类
- 用SPSS做数据分析?先弄懂SPSS的基础知识吧
- 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典
- 时序列数据库武斗大会之 OpenTSDB 篇
- 应当使用 SQLite 的五个原因
- Apache Spark作为编译器:深入介绍新的Tungsten执行引擎
- DC/OS 的安装与部署
- Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑
- 4个简单的数据管理技巧
- MongoDB的设计模式策略
- 如何用容器实现生产级Redis sharding集群一键交付
- Hadoop旧mapreduce的map任务切分原理
- 解读Neo4j全新的Python驱动程序
- MySQL 5.7 X Plugin:流水线技术vs.并行查询技术
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法