git 基于发布分支的开发
创建发布分支:
(1) 软件hello-world的1.0发布版本库中有一个里程相对应.
/home/jackluo/workspace/user1/workspace/hello-world
git tag -n1 -l v*
(2)基于里程v1.0创建发布布hello-1.x.
注:使用了git checkout 命令创建分支,最后一个参数v1.0是新分支 hello-1.x创建的基准点,如果没有里程,使用提交ID也是一样
[root@localhost hello-world]# git tag -n1 -l v*
v1. Release 1.0
[root@localhost hello-world]# git checkout -b hello-x.x v1.
切换到一个新分支 'hello-x.x'
(3)用git rev-parse 命令可以看到hello-1.x分支对应的提交ID和里程v1.0指向的提交一致,但是和master不一样
提示:因为里程v1.0是一个包含提交说明的里程,因此为了显示其对应的提交ID,使用特别的记法 "v1.0^{}".
[root@localhost hello-world]# git rev-parse hello-x.x v1.^{} master
d901dd8170f67fec607828905d5fbd91e3272400
d901dd8170f67fec607828905d5fbd91e3272400
733dcf67eba976a61d0dc6396c9d23cb23568591
(4)开发者user1将分支hello-1.x推送到远程 共享版本库,因为开发者user2修改Bug时也要用到该分支
[root@localhost hello-world]# git push origin hello-x.x
Total (delta ), reused (delta )
To /home/jackluo/workspace/repos/hello-world.git
* [new branch] hello-x.x -> hello-x.x
(5).开发者user2 从远程共享版本库获取新的分支。
开发者user2执行git fetch命令,将远程共享版本库的新分支hello-1.x复制到本地引用origin/hello-1.x上.
[root@localhost hello-world]# cd ../../../user2/workspace/hello-world/
[root@localhost hello-world]# git fetch
remote: Counting objects: , done.
remote: Compressing objects: % (/), done.
remote: Total (delta ), reused (delta )
Unpacking objects: % (/), done.
来自 /home/jackluo/workspace/repos/hello-world
* [新分支] hello-x.x -> origin/hello-x.x
d901dd8..733dcf6 master -> origin/master
(6).开发者user2切换到hello-x.x分支.
[root@localhost hello-world]# git checkout -b hello-x.x origin/hello-x.x
分支 hello-x.x 设置为跟踪来自 origin 的远程分支 hello-x.x。
切换到一个新分支 'hello-x.x'
(1)编辑文件src/main.c,将"--help"字符串修改为"--help".
[root@localhost hello-world]# cd ../../../user1/workspace/hello-world/
[root@localhost hello-world]# vim src/main.c
(2)开发者user1的改动可以从下面的差异比较中看到.
[root@localhost hello-world]# git diff
(3) 执行提交
[root@localhost hello-world]# git add -u
[root@localhost hello-world]# git commit -m "Fix typo: -help to --help."
[hello-x.x ca43043] Fix typo: -help to --help.
file changed, insertions(+), deletions(-)
(4).推送到远程共享版本库.
[root@localhost hello-world]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置: git config --global push.default matching 若要不再显示本信息并从现在开始采用新的使用习惯,设置: git config --global push.default simple 参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7. 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式) Counting objects: , done.
Delta compression using up to threads.
Compressing objects: % (/), done.
Writing objects: % (/), bytes | bytes/s, done.
Total (delta ), reused (delta )
开发者user2工作在发布分支.
(1)进入开发者user2的工作区,并确保工作在hello-x.x分支中
[root@localhost hello-world]# cd ../../../user2/workspace/hello-world/
[root@localhost hello-world]# git checkout hello-x.x
已经位于 'hello-x.x'
(2)编辑文件 src/mai.c,修改代码中的Bug.
[root@localhost hello-world]# vim src/main.c
[root@localhost hello-world]# git format-path jx/v1...jx/v1.
git:'format-path' 不是一个 git 命令。参见 'git --help'。 您指的是这个么?
format-patch
[root@localhost hello-world]# git format-patch jx/v1...jx/v1.
-Bugfix-allow-spaces-in-username.patch
[root@localhost hello-world]# patch -p1 < -Bugfix-allow-spaces-in-username.patch
patching file src/main.c
[root@localhost hello-world]# git diff
[root@localhost hello-world]# cd src/
[root@localhost src]# ll
总用量
-rw-r--r-- root root 1月 : main.c
-rw-r--r-- root root 12月 : Makefile
-rw-r--r-- root root 12月 : version.h.in
[root@localhost src]# make
version.h.in => version.h
cc -c -o main.o main.c
cc -o hello main.o
[root@localhost src]# ./hello Jack Luo
Hi, Jack Luo.
(version: v1.-dirty)
[root@localhost src]# git add -u
[root@localhost src]# git commit -m "Bugfix: allow spaces in username."
[hello-x.x 0ad2a9e] Bugfix: allow spaces in username.
file changed, insertions(+), deletion(-)
开发者user2合并推送
开发者user2在本地版本完成提交后,
[root@localhost src]# git pull
Already up-to-date.
[root@localhost src]# git log --graph --oneline
[root@localhost src]# cd ..
[root@localhost hello-world]# git checkout master
切换到分支 'master'
您的分支落后 'origin/master' 共 个提交,并且可以快进。
(使用 "git pull" 来更新您的本地分支)
[root@localhost hello-world]# git pull
更新 d901dd8..733dcf6
Fast-forward
src/Makefile | ++-
src/main.c | ++++++++++++++++++++++++++++++++++++-----
files changed, insertions(+), deletions(-)
[root@localhost hello-world]# git pull
Already up-to-date.
[root@localhost hello-world]# git push
Everything up-to-date
[root@localhost hello-world]# git checkout master
已经位于 'master'
发布分支的提交合并到主线.
1.操作
查看分支 hello-1.x的日志,确认要提交的ID.
从下面的日志中可以看出分支hello-1.x 的最新提交是一个合并提交,可以分别用"hello-1.x^1和"hello-1.x^2"表示
[root@localhost hello-world]# git pull
Already up-to-date.
[root@localhost hello-world]# git log - --graph --oneline hello-x.x
* 9cc4e7b Merge branch 'hello-x.x' of /home/jackluo/workspace/repos/hello-worl
|\
| * ca43043 Fix typo: -help to --help.
* | 0ad2a9e Bugfix: allow spaces in username.
(5)操作发生冲突,通过查看状态可以看到是在文件src/main.c上发生了冲突.
[root@localhost hello-world]# git status
# 位于分支 master
# 您正在做拣选操作。
# (解决冲突并运行 "git cherry-pick --continue")
# (使用 "git cherry-pick --abort" 以取消拣选操作)
#
# 未合并的路径:
# (使用 "git add <file>..." 标记解决方案)
#
# 双方修改: src/main.c
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# -Bugfix-allow-spaces-in-username.patch
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@localhost hello-world]# git status
# 位于分支 master
2.冲突发生的原因,通过下面的命令可以看到底是哪些提交引起的冲突.
[root@localhost hello-world]# git log master...hello-x.x^
commit 0ad2a9e90213aca2d882ba6fa49d4667db5e2106
Author: user2 <user2@sun.ossxp.com>
Date: Thu Jan :: + Bugfix: allow spaces in username. commit 733dcf67eba976a61d0dc6396c9d23cb23568591
Author: user1 <user1@sun.ossxp.com>
Date: Thu Jan :: + Refactor: use getopt_long for arguments parsing.
3.冲突解决
git 基于发布分支的开发的更多相关文章
- git基于某个分支创建分支
1.git checkout -b 新分支名 老分支名 git checkout -b dev_20150909 master git ls -tree 分支名字
- git 基于某个分支创建分支
1.拷贝源代码 git clone git@git地址 cd 项目目录 2.根据已有分支创建新的分支 git checkout -b yourbranchname origin/oldbranchna ...
- Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
准备工作:安装 Jenkins+java 直接百度安装,在此忽略 dotnet sdk(iis部署已经安装) 一:windows 部署到IIS 首先搭建IIS,站点应用程序池选择 ‘无托管代码’ 安装 ...
- GitHub Flow & Git Flow 基于Git 的两种协作开发模式
介绍基于Git 两种协作开发模式,GitHub Flow & Git Flow 对于Github 一些好用的特殊操作技巧 ,可以见GitHub 特殊操作技巧 和Git的基本操作 一 GitHu ...
- Git 分支-利用分支进行开发的工作流程
3.4 Git 分支 - 利用分支进行开发的工作流程 利用分支进行开发的工作流程 现在我们已经学会了新建分支和合并分支,可以(或应该)用它来做点什么呢?在本节,我们会介绍一些利用分支进行开发的工作流程 ...
- git多人协作式开发时分支管理策略
什么是 git-flow? Git Flow是一套使用Git进行源代码管理时的一套行为规范 主分支Master 首先,代码库应该有一个.且仅有一个主分支.所有提供给用户使用的正式版本,都在这个主分支上 ...
- git如何利用分支进行多人开发
在使用git时,假如远程仓库有 dev 和 master 两个分支,master 作为一个稳定版分支,可用于直接发布产品,日常的开发则 push 到 dev 分支,那本地是不是要从 dev 分支中创建 ...
- git 操作 :从远程仓库gitLab上拉取指定分支到本地仓库;git如何利用分支进行多人开发 ;多人合作代码提交实践
例如:将gitLab 上的dev分支拉取到本地 git checkout -b dev origin/dev 在本地创建分支dev并切换到该分支 git pull origin dev 就可以把git ...
- 怎么查看当前的git分支是基于哪个分支创建的?
2019独角兽企业重金招聘Python工程师标准>>> Question: 比如从 branch A 切出一个 branch B 然后对branch B做了一系列的操作 然后忘记了b ...
随机推荐
- intellij idea 如何更改编辑器文本字体和大小
换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea字体设值分成两部分,一部分是UI部分字体字号设 ...
- 【转】maven命令背后是如何工作的
转载自:http://yinny.iteye.com/blog/1883488 Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),它有三套相互独立的生命周期,请注意 ...
- Android 中的Resource
Android与ios相比,各种各样Resource算个独特之处.详情请参见官网Resource Types Resource有许多种,常见的有图像资源,布局资源,等等.每一种资源的位置都是固定的,这 ...
- DP:Islands and Bridges(POJ 2288)
2015-09-21 造桥基建工程 题目大意,就是有n座岛和k座桥,要你找一条哈密顿圈(找完所有的岛,并且每个岛只经过一次),当经过一座岛就加上岛的价值,如果两岛联通,则加上两座岛的价值之积,如果三座 ...
- 越狱后天气闪退 iPhone5天气闪退解决方法
iPhone5天气闪退解决方法: 第一步:前往Cydia卸载AppSync; 第二步:通过iTools删除/var/mobile/Library/Caches/com.apple.mobile.ins ...
- Java内存访问重排序笔记
>>关于重排序 重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. > ...
- Android ADT 下载 ( ADT-23.0.7 )
https://dl.google.com/android/ADT-23.0.7.ziphttps://dl.google.com/android/ADT-23.0.6.zip ADT百度云下载链接( ...
- [杂]DeadLock, Isolation Level, EntityFramework
由于没有注意到EF事务的默认隔离级别是Serializable,(据说EF6.0以后默认隔离级别改成了Read_Commit_Snapshot)--这里有误,应该是加了TransactionScope ...
- [译]SQL Server 之 索引基础
SQL Server中,索引以B-tree的结构组织数据.B-tree代表平衡树,但是SQL Server使用一种叫做B+的树. B+树不是总是保持严格的平衡的树. 首先,索引有两个主要的部件:一个页 ...
- win32_11gR2_database安装教程