目的:限制本地仓库某一个分支提交代码,只能通过合并代码的方式更新分支代码。(注:合并代码冲突了, 这个必须在该分支提交。此时可以放开限制提交代码)
场景: 开发过程中我们可能会有开发分支和测试分支,因不确定多个需求的上线点是否一致(即使事先确定同一时间点上线也可能因为各种原因导致仅能上线部分功能),会考虑不同的需求放在不同的分支上开发,但为了方便测试,会将不同的需求放在同一分支发布到测试环境。 这个过程中我们就会在不同的开发分支和这个测试分支切换。 为防止后续测试过程中,不小心将bug修复代码写在测试分支,我们就要限制在这个测试分支的提交(本地仓库的提交)。
实现步骤:
1. 找到项目的.git目录,并找到hooks目录, 该目录下有git命令的钩子文件,如下图, 这些钩子文件可以在触发相关命令场景时被调用。
2. 修改相关钩子文件内容,并将.sample后缀去掉。 如我们本次要在提交之前判断分支名称,如果当前分支是禁止提交的分支,则要终止commit操作。
-
先把pre-commit.sample文件名修改为pre-commit
-
修改文件内容, 在第一行非注释代码之前添加如下内容。(注意:文件的第一行是“#!/bin/sh” 这行虽然是注释,但shell脚本中是有用的,在它之后添加以下代码即可)
# 获取当前的分支名称
branch="$(git rev-parse --abbrev-ref HEAD)"
# 判断当前分支是否为禁止提交的分支名, 如果是则给出相关提示,并终止commit
if [ "$branch" = "master" ]; then
echo "当前分支$branch不支持提交操作, You can't commit to $branch branch"
exit 1
3. 如上代码, 我是禁止在master分支上提交代码, 可以提交一次看是否限制住了, 下图为我的测试
4. 至此我们的目的已经达到了,限制在该分支提交代码。但在合并代码时如果出现了代码冲突我们还是要在该分支提交,此时只要修改pre-commit文件名为任意非该名称,让我们修改的文件失效即可。
5. 限制提交解除了。 忙着改bug呢,不小心真的将修复代码提交到了限制分支怎么办? 可以使用cherry-pick命令, 将该提交内容合并到你的开发分支。
目的:限制本地仓库某一个分支提交代码,只能通过合并代码的方式更新分支代码。(注:合并代码冲突了, 这个必须在该分支提交。此时可以放开限制提交代码)场景: 开发过程中我们可能会有开发分支和测试分支,因不确定多个需求的上线点是否一致(即使事先确定同一时间点上线也可能因为各种原因导致仅能上线部分功能),会考虑不同的需求放在不同的分支上开发,但为了方便测试,会将不同的需求放在同一分支发布到测试环境。 这个过程中我们就会在不同的开发分支和这个测试分支切换。 为防止后续测试过程中,不小心将bug修复代码写在测试分支
git checkout 分支名,例如从master切换到分支:git checkout 2.0.1.20120806
3.远程分支就是本地分支push到服务器上。比如master就是一个最典型的远程分支(默认)。
git push origin 2.0.1.20120806
4.远程分支和本地分支需要区分好,所以,在从服务器上拉取特定分支的时候,需要指定远程分支的名字。
3.Developer:可以克隆代码、开发、提交、push、RD可以赋予这个权限
4.Master:可以创建项目、添加 tag 、保护分支、添加项目成员、编辑项目、核心RD负责人可以赋予这个权限
5.Owner:可以设置项目的
git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除
git reset --hard HEAD~3:将最近3次的提交回滚
【远程代码库回滚】:
这个是重点要说的内容,过程比本地回滚要复杂
应用场景:自动部署系统发布后发现问题
在上一篇博客中我们主要讲解了Git远程仓库,相信大家对远程的Git仓库有一定的了解,嘿嘿。在这一篇博客中我们来在大家讲解一下Git分支管理,这可以说是Git的又一大特点。下面我们就来学习一下Git分支管理吧。我们先来说一个简单的案例吧,你们团队中有多个人再开发一下项目,一同事再开发一个新的功能,需要一周时间完成,他写了其中的30%还没有写完,如果他提交了这个版本,那么团队中的其它人就不能继续开发了。但是等到他全部写完再全部提交,大家又看不到他的开发进度,也不能继续干活,这如何是好呢?对于上面的这个问题,我们就可以用分支管理的办法来解决,一同事开发新功能他可以创建一个属于他自己的分支,其它同事暂
今天在向gitlab push代码的时候出现:
! [remote rejected] master -> master (pre-receive hook declined)
这是因为gitlab默认开启了分支保护,以保护master分支不被其他用户随意push、merge,而我本机的user.name不是该项目的maintainer
解决办法就是:
将user.name改为该分支的maintainer
>>> git config --global us
好的,在 git 中合并分支的步骤如下:
1. 首先确保你在你要合并到的分支上,比如说你要合并到 `master` 分支,那么先切换到 `master` 分支:
git checkout master
2. 接下来,使用 `git merge` 命令来合并分支。例如,如果你要合并 `feature1` 分支,你可以运行以下命令:
git merge feature1
3. 如果有冲突,git 会提示你解决冲突。你需要手动解决冲突,然后使用 `git add` 命令将解决冲突后的文件标记为已解决。例如:
git add file1 file2
4. 最后,使用 `git commit` 命令提交合并后的更改。例如:
git commit -m "Merge branch feature1"
这就是合并分支的基本流程。希望这些信息能帮到你!