在我们开发项目的过程中,尤其是在企业中多人开发,不同的开发者负责不同的模块,所以我们要创建个人的分支。但是该如何创建个人的分支呢?分支和主分支应该如何关联呢?这些问题困扰了我很久,目前大概清楚一些规范流程,所以记录一下。
一、gitlab如何创建项目?
1. 首先在gitlab上创建项目,例如:tradeprome2
2. 与后台开发人员沟通,前端和后台分别创建两个项目分组。
3. 当前项目的主分支是master,我们需要创建分支。
二、git如何创建分支?
注:需要说明的是,在开发项目的过程中。为了避免代码有冲突以及个人的代码对整个项目的代码造成影响,所以我们需要创建几个必要的分支,以此来更好的管理我们的项目。
1. 首先,我们需要创建一个 测试分支dev;它的作用是我们在开发的过程中,需要提交至个人分支到至dev分支上。如果我们的代码没有任何问题,由管理员统一将dev上的代码同步到master主分支上。最终,我们上线的代码就是master分支的代码。因此,master分支上的代码应该与dev上的代码保持一致。
2. 其次,我们需要创建一个开发分支,开发分支的命名方式为:feature-***(模块或功能),例如:feature-login. 而我们feature上的代码都是从dev分支上拉取下来的,同样最终我们feature分支上的代码提交至dev分支。然后在删除feature-*** 的分支即可。
3. 最终,由管理员统一将dev上的代码合并到master主分支上。
注意:如果我们在上线后,发现有bug需要进行改正,则一定要拉取master的代码,因为主分支上的代码是最新的。
整体的流程如图所示:
三、git如何通过命令行创建分支流程?
注:当前在项目中,默认自己所在master下。
git branch 查看输入这条命令检查是否创建成功,前面的*代表的是当前你所在的工作分支。
(1) 在本地新建一个分支 git branch dev
(2) 切换到新建的分支 git checkout dev
(3) 将新的分支发布在gitlab上(远程分支) git push origin dev
(4) 把本地的分支与远程的分支做关联 git branch --set-upstream-to=origin/dev
(5) 从远程分支上获取最新版本并merge(合并)到本地 git pull
注:如果需要创建feature-**分支,则需要在deb分支下进行创建。
步骤如下:
(1) 首先git branch 查看当前分支是否在dev分支下;
(2) 如果dev前有*,表示当前的工作分支为dev,否则 git checkout dev 切换到dev分支下;
(3) 然后在此分支下,通过git branch feature-**,来创建开发分支,那么开发分支就继承了dev分支的代码;
(4) 其他步骤如上所示;
四、git常用的删除分支命令?
git branch -d newBranch 在本地删除一个分支
git push origin :newBranch/git push origin --delete newBranch 在gitlab远程删除一个分支
注意:删除远程分支后,如果有对应的本地分支,本地分支并不会同步删除!需要在删除本地分支。
git branch -a 查看所有分支
git branch -r 查看远程分支
git branch -m old-branch new-branch 修改分支名称
常见问题:
1. 解决git远程分支已经删除本地还存在的办法?
在做项目的过程中发现,我将远程分支直接删除了,本地的对应分支也删除了。但是我用 git branch -a 还可以看到远程存在此分支。
$ git branch -a
master
* dev
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/feature-login
remotes/origin/dev
在此打印结果中,remotes/origin/feature-login 已经被我删除了,但是仍然存在。
解决办法:
1. 使用 git remote show origin 查看remote地址,远程分支,还有本地分支与之相对应关系等信息。
$ git remote show origin
warning: redirecting to http://gitlab.xcar.com.cn/product_library/newcar-api.git/
* remote origin
Fetch URL: http://gitlab.xcar.com.cn/product_library/newcar-api
Push URL: http://gitlab.xcar.com.cn/product_library/newcar-api
HEAD branch: master
Remote branches:
gao.yan new (next fetch will store in remotes/origin)
master tracked
refs/remotes/origin/feature-login stale (use ‘git remote prune’ to remove)
dev tracked
Local branches configured for ‘git pull’:
master merges with remote master
dev merges with remote dev
Local refs configured for ‘git push’:
master pushes to master (fast-forwardable)
test pushes to dev (up to date)
2. 根据提示可以看到远程的分支已经不存在了,并且让使用(use ‘git remote prune’ to remove)此命令
git remote prune origin 移除这个分支(刷新本地仓库与远程仓库的保持这些改动的同步)
$ git remote prune origin
warning: redirecting to http://gitlab.xcar.com.cn/product_library/newcar-api.git/
Pruning origin
URL: http://gitlab.xcar.com.cn/product_library/newcar-api
* [pruned] origin/feature-login
3. 执行完命令后在次用 git branch -a 查看,可以看到已经被删除 (git branch -r 只查看远程的分支)
$ git branch -a
master
* dev
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/dev