git 团队开发分支管理
2017-05-05 16:41
483 查看
指令:
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建+切换分支
git merge <name> 合并某分支到当前分支
git branch -d <name> 删除分支
git branch -D <name> 删除分支在没有合并分支的情况下
git log --graph --pretty=oneline --abbrev-commit 以图表的形式查看分支线
git merge —no-ff -m “提交备注” <需合并的分支名>
git add A/* 添加文件夹
git stash 将工作区修改的内容存储起来 显示为原先未修改的状态
git stash list 查看stash 存储的内容
git stash apply stash@{0} 恢复
git stash drop stash@{0} 删除
git stash pop 恢复的时候同时将stash内容删除
git push origin <name> 将该分支推送到远程分支
git checkout -b <branch-name> origin/<name> 创建于远程分支相关联的分支
git pull 把远程仓库的内容抓到本地 分支的不同获取的内容也不同
git branch —set-upstream <branch-name> origin/<name> 指定本地分支与远程分支链接
git branch --set-upstream-to=origin/<branch> <branch-name> 指定本地分支与远程分支链接
一般合并会提示 Fast-forward “快进合并” 就是直接把master指向dev的当前提交。
合并冲突
当两个分支中同一处被修改,在合并的时候就会引起冲突,git 会在文件中用<<<<<<,=======,>>>>>>标出不同文件的分支内容,修改后保存提交即可。
用带参数的 git log 可以查看分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
分支管理策略
禁用Fast-forward
在合并的时候使用 Fast-forward 模式时,删除分支后会丢掉分支信息。
如果强制禁用Fast-forward模式,Git就会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息。
操作:
$ git merge —no-ff -m “提交备注” <分支名>
-m 合并的时候创建一个新的commit
具体原因是采用Fast-forward 模式时 是将master 指针直接指向dev分支的最新提交,并且commit ID 也是一样的
所以dev的分支信息就会丢掉;而采用--no-ff 模式,在合并的时候进行了一次 git commit 合并操作,commit id 也会不同,在分支历史上就能看到信息。
分支策略
在实际开发中,按照上面的分支策略图进行分支管理:
首先,master分支仅用来发布新版本,不能在上面干活。
Dev分支是测试工作的主分支,如果要发布一个版本 ,将dev合并到master就可以了。
开发的小伙伴们基于dev分支 分出自己的分支,时不时往dev分支合并就可以了。
bug分支
情境:
当你正在dev上开发一个任务,需要两天才能完成,但是现在接到一个bug需要马上修复,但是工作区(开发的代码)才完成了一半,还没法提交,怎么办呢。
Git提供了一个stash功能,可以把当前工作区的内容存起来,等以后恢复继续工作。
$ git stash 将当前工作区修改的内容存储起来并恢复修改之前的状态
然后可以切到master修改bug
$ git checkout -b issue-101
Switched to a new branch 'issue-101'
修改完提交
$ git add .
$ git commit -m "fix bug 101"
[issue-101 df0195f] fix bug 101
切换主分支进行合并
$ git checkout master
$ git merge --no-ff -m "merge bug fix 101" issue-101
$ git branch -d issue-101
bug 修改完 到dev分支先进行改完bug的master 与当前dev的合并
$ git checkout dev
$ git merge --no-ff -m "dev-merge-m" master
然后释放之前存储的内容
git stash list
stash@{0}: WIP on dev: 8190e93 add dev
$ git stash pop
Auto-merging readme.md
On branch dev
为什么要有这个存储功能,个人理解,如果在dev的分支中任务未完成 然后切到别的分支 你修改的内容在工作区还是会显示的。当然有人说可以将dev中的修改先提交了。这样不是不可以。严格意义上将提交代表你的代码已经完成了可以上传提交了。
所以用stash还是比较方便的 也可以在开发的不同阶段进行多次stash
多人协作
这里用Github 搭建远程仓库为例:
在github上新建一个仓库
然后将本地仓库与之关联
$ git remote add origin
git@github.com:******
$ git push -u origin master
然后在GitHub中点击仓库的settings 在Options 中点击Collaborators
然后在搜索框中输入你要邀请的小伙伴的名字或者邮箱,然后等待小伙伴的同意,也可以直接将邀请链接直接发给小伙伴
小伙伴直接在本地新建仓库并克隆GitHub上的内容
小伙伴可以创建一个dev分支并上传到远程服务器上
$ git checkout -b dev
//添加一些内容
$ git add .
$ git commit -m “add dev”
$ git push origin dev
现在小伙伴已经在远程仓库创建了一个分支
然后我在我本地的仓库执行如下:
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/********** * [new branch] dev -> origin/dev
Already up-to-date.
//会发现有一个新的分支
接着执行
$ git branch
* master
看不到dev 分支,需要在本地创建一个与远程仓库对应的分支,
$ git checkout -b dev origin/dev
M .idea/misc.xml
Branch dev set up to track remote branch dev from origin.
Switched to a new branch ‘dev'
$ git branch
* dev
master
然后我创建一些内容提交 没有什么问题
接着小伙伴去dev分支上执行 git pull 抓取我刚刚提交的内容出现如下问题
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0
Unpacking objects: 100% (5/5), done.
From https://github.com/*****
0008c75..681dcf0 dev -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
根据提示执行 $git branch --set-upstream-to=origin/dev dev 使本地分支与远程分支链接
Branch dev set up to track remote branch dev from origin.
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建+切换分支
git merge <name> 合并某分支到当前分支
git branch -d <name> 删除分支
git branch -D <name> 删除分支在没有合并分支的情况下
git log --graph --pretty=oneline --abbrev-commit 以图表的形式查看分支线
git merge —no-ff -m “提交备注” <需合并的分支名>
git add A/* 添加文件夹
git stash 将工作区修改的内容存储起来 显示为原先未修改的状态
git stash list 查看stash 存储的内容
git stash apply stash@{0} 恢复
git stash drop stash@{0} 删除
git stash pop 恢复的时候同时将stash内容删除
git push origin <name> 将该分支推送到远程分支
git checkout -b <branch-name> origin/<name> 创建于远程分支相关联的分支
git pull 把远程仓库的内容抓到本地 分支的不同获取的内容也不同
git branch —set-upstream <branch-name> origin/<name> 指定本地分支与远程分支链接
git branch --set-upstream-to=origin/<branch> <branch-name> 指定本地分支与远程分支链接
一般合并会提示 Fast-forward “快进合并” 就是直接把master指向dev的当前提交。
合并冲突
当两个分支中同一处被修改,在合并的时候就会引起冲突,git 会在文件中用<<<<<<,=======,>>>>>>标出不同文件的分支内容,修改后保存提交即可。
用带参数的 git log 可以查看分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
分支管理策略
禁用Fast-forward
在合并的时候使用 Fast-forward 模式时,删除分支后会丢掉分支信息。
如果强制禁用Fast-forward模式,Git就会在merge时生成一个新的commit,这样从分支历史上就可以看出分支信息。
操作:
$ git merge —no-ff -m “提交备注” <分支名>
-m 合并的时候创建一个新的commit
具体原因是采用Fast-forward 模式时 是将master 指针直接指向dev分支的最新提交,并且commit ID 也是一样的
所以dev的分支信息就会丢掉;而采用--no-ff 模式,在合并的时候进行了一次 git commit 合并操作,commit id 也会不同,在分支历史上就能看到信息。
分支策略
在实际开发中,按照上面的分支策略图进行分支管理:
首先,master分支仅用来发布新版本,不能在上面干活。
Dev分支是测试工作的主分支,如果要发布一个版本 ,将dev合并到master就可以了。
开发的小伙伴们基于dev分支 分出自己的分支,时不时往dev分支合并就可以了。
bug分支
情境:
当你正在dev上开发一个任务,需要两天才能完成,但是现在接到一个bug需要马上修复,但是工作区(开发的代码)才完成了一半,还没法提交,怎么办呢。
Git提供了一个stash功能,可以把当前工作区的内容存起来,等以后恢复继续工作。
$ git stash 将当前工作区修改的内容存储起来并恢复修改之前的状态
然后可以切到master修改bug
$ git checkout -b issue-101
Switched to a new branch 'issue-101'
修改完提交
$ git add .
$ git commit -m "fix bug 101"
[issue-101 df0195f] fix bug 101
切换主分支进行合并
$ git checkout master
$ git merge --no-ff -m "merge bug fix 101" issue-101
$ git branch -d issue-101
bug 修改完 到dev分支先进行改完bug的master 与当前dev的合并
$ git checkout dev
$ git merge --no-ff -m "dev-merge-m" master
然后释放之前存储的内容
git stash list
stash@{0}: WIP on dev: 8190e93 add dev
$ git stash pop
Auto-merging readme.md
On branch dev
为什么要有这个存储功能,个人理解,如果在dev的分支中任务未完成 然后切到别的分支 你修改的内容在工作区还是会显示的。当然有人说可以将dev中的修改先提交了。这样不是不可以。严格意义上将提交代表你的代码已经完成了可以上传提交了。
所以用stash还是比较方便的 也可以在开发的不同阶段进行多次stash
多人协作
这里用Github 搭建远程仓库为例:
在github上新建一个仓库
然后将本地仓库与之关联
$ git remote add origin
git@github.com:******
$ git push -u origin master
然后在GitHub中点击仓库的settings 在Options 中点击Collaborators
然后在搜索框中输入你要邀请的小伙伴的名字或者邮箱,然后等待小伙伴的同意,也可以直接将邀请链接直接发给小伙伴
小伙伴直接在本地新建仓库并克隆GitHub上的内容
小伙伴可以创建一个dev分支并上传到远程服务器上
$ git checkout -b dev
//添加一些内容
$ git add .
$ git commit -m “add dev”
$ git push origin dev
现在小伙伴已经在远程仓库创建了一个分支
然后我在我本地的仓库执行如下:
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/********** * [new branch] dev -> origin/dev
Already up-to-date.
//会发现有一个新的分支
接着执行
$ git branch
* master
看不到dev 分支,需要在本地创建一个与远程仓库对应的分支,
$ git checkout -b dev origin/dev
M .idea/misc.xml
Branch dev set up to track remote branch dev from origin.
Switched to a new branch ‘dev'
$ git branch
* dev
master
然后我创建一些内容提交 没有什么问题
接着小伙伴去dev分支上执行 git pull 抓取我刚刚提交的内容出现如下问题
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0
Unpacking objects: 100% (5/5), done.
From https://github.com/*****
0008c75..681dcf0 dev -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
根据提示执行 $git branch --set-upstream-to=origin/dev dev 使本地分支与远程分支链接
Branch dev set up to track remote branch dev from origin.
相关文章推荐
- 团队开发Git分支管理策略
- Git管理项目---教程(实现团队开发)
- 多人开发 Git 分支管理详解
- 多人开发 Git 分支管理详解
- Hybrid App开发git多分支代码版本管理实践
- git 分支管理,分支中进行开发
- Git各开发分支管理规范
- 多人开发 Git 分支管理详解
- 【转载】Git项目管理 第2章 基于Git的团队协同开发
- Git学习总结(12)——多人开发 Git 分支管理详解
- Git工程开发实践(四)——Git分支管理策略
- Git 分支---3.3分支的管理---3.4利用分支进行开发的工作流程
- Git 分支管理与开发流程
- Git开发分支管理
- Git用法之分支管理和分支开发工作流
- iOS开发中git分支创建和管理
- 开发中的git分支管理
- 在博客园最大帮派不是丐帮,而是控件开发团队(从发帖量来看),招团队管理
- 软件团队的建设和软件开发管理[zz老秦]
- Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、源代码管理、版本控制