您的位置:首页 > 其它

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