gitlab中对master分支是设定为protected的,对于developer身份的成员需要单独拉一个分支让其开发,等到稳定后来merge到master分支中,但是这个时候我们如何在本地根据developer分支来开发,又如何pull developer分支到本地,在push代码到developer分支呢?
创建developer分支
这里注意如果你远程分支删除后,你执行git branch -a
还是会存在的,这个时候你执行一下git fetch -p
就可以了。
将远程代码clone到本地
拉到本地后,我们的分支信息如下:
58deMacBook-Pro:ResponseTimeTool wuxian$ git branch -a
* master
remotes/origin/developer
remotes/origin/master
这个时候我们是在主分支master开发的,所有的git pull和git push都是在master分支上操作的。但是我们不想这样做。
切换到developer分支上开发
58deMacBook-Pro:ResponseTimeTool wuxian$ git checkout -b local_developer remotes/origin/developer
Branch local_developer set up to track remote branch developer from origin.
Switched to a new branch 'local_developer'
这个时候我们已经切换到local_developer分支中开发,且该分支是由远程分支developer生成的。
git pull
58deMacBook-Pro:ResponseTimeTool wuxian$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From
96978fb..8a02689 developer -> origin/developer
Updating 96978fb..8a02689
Fast-forward
build.gradle | 1 +
1 file changed, 1 insertion(+)
我在gitlab的页面上developer分支上手动了修改某处,然后pull,显示是同developer拉取下来了,说明我们的git pull是成功的。
git push
但是我们执行git push就出问题了:
58deMacBook-Pro:ResponseTimeTool wuxian$ git push
Total 0 (delta 0), reused 0 (delta 0)
To git@gitlab.58corp.com:com.wuba.wuxian.autotest/ResponseTimeTool.git
* [new branch] local_developer -> local_developer
它会默认生成一个新的分支,名字和我本地分支一样,这是不正确的,我们要push到developer分支上的。
我们需要显示的执行push到的分支:
58deMacBook-Pro:ResponseTimeTool wuxian$ git push origin local_developer:developer
Counting objects: 1, done.
Writing objects: 100% (1/1), 175 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To
8a02689..1e27554 local_developer -> developer
这样就ok了。