【Git】使用Pull Request进行项目管理

在这里插入图片描述

【Git】使用PR进行项目管理

1 单独 master 分支

使用以下命令可以实现代码根提交

git add .                      # 将修改的内容暂存起来
git commit -m "commit message" # 将暂存的内容提交
git push origin master         # 推送至远程库

在这里插入图片描述

多次提交则会有多个 commit 节点

在这里插入图片描述

在大型项目的多人开发合作中,如果只有一个 public 下的 master 分支,对于代码库来说非常危险,极其容易因为错误删除某些重要文件、文件夹导致仓库崩溃。

2 多分支结构

2.1 分支创建

因此使用分支是非常必要的,分支之间相互独立,因此在修改时并不会对其余分支造成影响。先假设上述的 third commit 节点所修改的代码如下:

int main(int argc, char *argv[])
{
    cout << "master2" << endl;
    return 0;
}

现创建分支 test1,使用命令:

git branch test1
git checkout test1

即可创建一个新分支 test1 ,除此之外也可以使用如下命令:

git checkout -b test1

做出如下修改,并提交至分支 test1

int main(int argc, char *argv[])
{
    cout << "master2" << endl;
    cout << "test1" << endl;
    return 0;
}

提交节点图如下:

在这里插入图片描述

2.2 分支合并

使用git merge可以实现分支间的代码合并

git checkout master # 切换至主分支
git merge test1     # 合并

节点图如下,此时 master 节点与 test1 节点重合,完成合并,但无法直接看出分支见的相互关系。

在这里插入图片描述

即使test1分支提交多次,再合并至master分支也无法看出两者之间的关系,如下图

在这里插入图片描述

除此之外,merge 也无法实现代码审查的功能,若某分支删除了某些重要内容,并且该分支在时间线上领先于主分支,merge 时将会修改 master 的内容,与单 master 分支一样,很不安全。

2.3 合并请求

pull request:让别人拉取自己代码的请求

2.3.1 分支保护

若需要让 master 主分支不被任意删除、合并、推送,需要设置分支保护。不同的代码托管平台操作不一样,但都彼此相似:在设置中对 master 设置为保护分支,并且禁止推送。

2.3.2 提交代码基本流程

由于直接推送本地 master 分支已经不可行,因此首先需要新建分支,并且在分支上进行完成开发、提交,这里继续以上文的 test1 为例,现已将 test1 推送至 origin/test1 远程库。

假设 test1 分支领先于 master 一次 commit,如下图。

在这里插入图片描述

若需要合并至 master 则需要发起Pull Request(合并请求)。具体流程如下:

  1. 在仓库界面找到以下内容,并点击创建合并请求

在这里插入图片描述

  1. 选择需要拉取的分支以及合并的分支,点击创建合并请求

在这里插入图片描述

  1. 输入相关信息,创建PR

在这里插入图片描述

  1. 可随时进行评论、等待评审人评审代码,合并前需删除 WIP!此处需要留意能否自动合并,不能则需要解决冲突。

在这里插入图片描述

  1. 评审代码:

在这里插入图片描述

可以发布评论、通过请求变更。通过后会显示批准合并:

在这里插入图片描述

  1. 发布合并信息,最终确认合并

在这里插入图片描述

  1. 显示以下内容则说明成功合并,下方弹出的删除分支 ‘test1’ 可斟酌考虑是否删除

在这里插入图片描述

Git Graph 显示如下

在这里插入图片描述

2.3.3 合并冲突解决方案

首先准备不同于 master 的两个分支test1test2。其中三个分支的代码如下

master、origin/master:

int main(int argc, char *argv[])
{
    cout << "test" << endl;
    return 0;
}

test1、origin/test1:

int main(int argc, char *argv[])
{
    cout << "test" << endl;
    cout << "new test1" << endl;
    return 0;
}

test2、origin/test2:

int main(int argc, char *argv[])
{
    cout << "test" << endl;
    cout << "new test2" << endl;
    return 0;
}

Git Graph 显示如下

在这里插入图片描述

假设按照次序,先合并分支test1master。此时若再次合并 test2,则会有合并冲突,此时的合并步骤如下:

  1. 仿照【2.3.2】的内容发起 pull-request,提示有合并冲突

在这里插入图片描述

  1. 切换到 test2 分支,从远程库拉取 master 主分支的代码:

    git pull origin master # 注意是在 test2 分支下,而不是 master ,因为 master 修改后提交也不能推送
    

    提示:(自动合并失败,修正冲突然后提交修正的结果。)。此时Git Graph显示如下:

在这里插入图片描述

  1. 解决冲突,并推送至 origin/test2

    git push origin test2
    

在这里插入图片描述

  1. 此时再看 origin/master 分支,提示:(允许合并请求)

在这里插入图片描述

  1. 合并请求,拉取远程主分支至本地库进行更新:

    git pull origin master # 此处更新只是为了在本地观察 master 与其他分支间的相对关系,对代码提交无作用
    

    Git Graph显示如下:

在这里插入图片描述

3 注意事项

  1. 切记不要在主分支 master 上修改、commit 代码,因为这样无法推送至 origin/master,并且在以后其余开发者推送至 origin/master 后,再次 pull 时会产生合并冲突。主分支 master 在本地库是用来看的,用来获取其余分支与自己的关系的,不能对其进行修改。
  2. 在每次分支合并之后都可以在 master 分支拉取来自远程端的 origin/mater ,以查看当前最新代码
  3. 可使用 git 图形化插件显示 commit 节点,使用 vscode 编辑器的可使用 Git Graph 插件
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Cccolt_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值