创建发布分支:

(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 基于发布分支的开发的更多相关文章

  1. git基于某个分支创建分支

    1.git checkout -b 新分支名 老分支名 git checkout -b dev_20150909 master git ls -tree 分支名字

  2. git 基于某个分支创建分支

    1.拷贝源代码 git clone git@git地址 cd 项目目录 2.根据已有分支创建新的分支 git checkout -b yourbranchname origin/oldbranchna ...

  3. Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台

    准备工作:安装 Jenkins+java 直接百度安装,在此忽略 dotnet sdk(iis部署已经安装) 一:windows 部署到IIS 首先搭建IIS,站点应用程序池选择 ‘无托管代码’ 安装 ...

  4. GitHub Flow & Git Flow 基于Git 的两种协作开发模式

    介绍基于Git 两种协作开发模式,GitHub Flow & Git Flow 对于Github 一些好用的特殊操作技巧 ,可以见GitHub 特殊操作技巧 和Git的基本操作 一 GitHu ...

  5. Git 分支-利用分支进行开发的工作流程

    3.4 Git 分支 - 利用分支进行开发的工作流程 利用分支进行开发的工作流程 现在我们已经学会了新建分支和合并分支,可以(或应该)用它来做点什么呢?在本节,我们会介绍一些利用分支进行开发的工作流程 ...

  6. git多人协作式开发时分支管理策略

    什么是 git-flow? Git Flow是一套使用Git进行源代码管理时的一套行为规范 主分支Master 首先,代码库应该有一个.且仅有一个主分支.所有提供给用户使用的正式版本,都在这个主分支上 ...

  7. git如何利用分支进行多人开发

    在使用git时,假如远程仓库有 dev 和 master 两个分支,master 作为一个稳定版分支,可用于直接发布产品,日常的开发则 push 到 dev 分支,那本地是不是要从 dev 分支中创建 ...

  8. git 操作 :从远程仓库gitLab上拉取指定分支到本地仓库;git如何利用分支进行多人开发 ;多人合作代码提交实践

    例如:将gitLab 上的dev分支拉取到本地 git checkout -b dev origin/dev 在本地创建分支dev并切换到该分支 git pull origin dev 就可以把git ...

  9. 怎么查看当前的git分支是基于哪个分支创建的?

    2019独角兽企业重金招聘Python工程师标准>>> Question: 比如从 branch A 切出一个 branch B 然后对branch B做了一系列的操作 然后忘记了b ...

随机推荐

  1. Nginx和PHP-FPM的启动/重启脚本 [转发]

    Nginx和PHP-FPM的启动/重启脚本 [转发] (2012-07-27 16:07:52) 标签: it 分类: 学习 转载自:http://blog.sina.com.cn/s/blog_53 ...

  2. php 二分查找

    <?php /**二分查找:查找一个值在数组中的位置 * @$arr:操作的数组,前提是按顺序排列 * @$val:查找的值 * @$start:查找的起始位置,默认从数组的第一个数找起 * @ ...

  3. 修改setup.py的源

    方法一: 修改文件 ~/.pydistutils.cfg为: [easy_install] index_url = http://pypi.douban.com/simple 方法二: 直接在setu ...

  4. 在Python脚本中判断Python的版本

    引自:http://segmentfault.com/q/1010000000127878 如果是给人读,用 sys.version,如果是给机器比较,用 sys.version_info,如果是判断 ...

  5. wx.html2.WebView在 target="_blank" or rel="external" 没有反映的解决方法

    在wx.html2.EVT_WEBVIEW_LOADED中,用WebView.RunScript运行删除链接目标的脚本 javaScriptStr = '''function deleteBlank( ...

  6. CodeForces - 424B (贪心算法)

    Megacity Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Sta ...

  7. ubuntu 下wireshark 软件安装与使用

    在ubuntu下,使用wireshark也是很有必要的.虽然可以使用tcpdump等工具. ubuntu:11.10     1. sudo apt-get install wireshark     ...

  8. Eclipse 中Tomcat 启动 与直接启动Tomcat的区别

    这段时间不用Java 了突然发现在用的时候出问题了. 首先现在Eclipse和Tomcat,解压后 如图1所示: 图1: 进入里面的bin文件目录后发现有 如图2所示包含了startup.bat,st ...

  9. 干货分享:IBM StorwizeV7000部署与运维

    http://storage.it168.com/a2014/1211/1689/000001689526_3.shtml

  10. 数据库优化和SQL操作的相关题目

    SQL操作 1.有一个数据库表peope,表有字段name,age,address三个属性(注:没有主键).现在如果表中有重复的数据,请删去重复只留下其中的一条.重复的定义就是两条记录的name,ag ...