关于github Pull Request的用法

我们模拟一下使用git协同工作的场景。

假设原repo的owner是sphblood
贡献者是chunleili

一次最简单的完整PR

我们首先模拟一次最简单的情况,也就是没有任何冲突的情况。

1 owner建立repo

sphblood创建了一个repo,叫做learnPR,并且创建了一个文件叫做the first file made by sphblood
sphblood就是这个repo的所有者(owner)。只有他有权力对repo进行更改。(请记住这句话
在这里插入图片描述

2 contributor fork repo

chunleili则是贡献者(contributor)。他希望给这个repo添加新功能。
所以他就先fork了一下这个repo
在这里插入图片描述

在这里插入图片描述
建立了一个自己的相同名字的repo(名字也可以不同)。

3 contributor 修改 forked repo

这个repo是属于chunleili的,chunleili具有这个repo的所有权,他可以任意更改这个repo。

于是他新增了一个文件
在这里插入图片描述

因为这个repo是属于他自己的,所以他想干嘛就干嘛。他还可以随意删除第一个文件(但是这种情况我们暂时先不说,我们先看最简单的情况)

4 owner 修改原repo

在chunleili修改repo的时候,sphblood也没闲着,对原repo也进行了一些修改,增加了一个文件the second file made by sphblood
在这里插入图片描述

5 contributor同步原repo

这个时候,chunleili会发现如下字样

This branch is 1 commit ahead, 1 commit behind sphblood:main.

在这里插入图片描述
也就是说,chunleili落后sphblood一个commit(即sphblood增加的那个文件:the second file made by sphblood)
同时超前sphblood一个commit(即chunleili自己增加的那个文件:the second file made by chunleili)

他要做的是:

  1. 同步owner的那个文件,也就是把owner的东西pull下来合并到自己这里
  2. 提交自己写的文件给owner审核,通过后就合并入了owner的repo。这一步就是所谓的Pull Request。即向owner发出请求,希望owner能够merge自己之后pull自己的内容。

首先,同步owner文件,直接点syn fork就好了

在这里插入图片描述

同步之后sphblood的第二个文件也被并入了forked repo当中。
在这里插入图片描述

6 contributor 发出Pull Request

这一步是把contributor增加的新内容提交给owner审核

然后点击Pull Request ->New Pull Request
在这里插入图片描述
再点击create pull request
在这里插入图片描述

输入附加的信息之后,就会创建一个PR
在这里插入图片描述

7 owner审核PR

原owner会受到一个邮件通知:说有人发出了一个PR,请你去审核一下。
在这里插入图片描述

owner打开自己的repo,就会发现有一个open状态的PR
在这里插入图片描述

点开之后,owner可以选择允许把这个PR Merge到自己的repo中
在这里插入图片描述

然后留下一些消息后confirm即可
在这里插入图片描述

8 contributor收到审核通过的通知

contributor收到一封邮件,说PR已经审核通过
在这里插入图片描述

这时候再去看PR界面,就会发现 1 closed, 0 open。

在这里插入图片描述

至此,我们就完成了一次完整的PR。

有冲突的情况

首先,什么情况下会发生冲突?

显然两者同时修改了一个文件,并且同时对某一行进行了修改的时候会发生。

具体来讲:

假设owner先建立了一个文件conflicts.txt
然后写入一行文字为
owner’s words

然后contributor fork了这个repo,并在自己forked repo中修改了这行文字为
contributor’s words

然后owner又再次修改了同一个文件,修改为:
owner’s words 222

这时候contributor想要PR,显然就发生了冲突。因为同时有两个人对同一个文件进行了修改(注意是同时,因为此时对于contributor做PR的那个时刻来说,既要接收owner的修改,又要接收contributor自己的修改。假如两者有先后顺序那就不会产生冲突了)。那么就需要对这两行之一进行取舍。解决冲突一般就是删掉contributor更改的部分,然后重新PR。

假设我扮演的是contributor (后面我们都扮演的是这个角色)

首先我在我自己fork的文件夹中对以下文件进行了修改
在这里插入图片描述
修改为了
在这里插入图片描述
我在我自己forked的repo中进行commit和push,这都是没问题的。

在这里插入图片描述

但是想要PR的时候,就出现问题了。
在这里插入图片描述
再点击sync fork的时候,github会叫你舍弃自己的那个commit。

开什么玩笑?决不能舍弃!因为你辛辛苦苦写的代码,绝对不能就这么扔了!只要把冲突的那几行修复过来,不就行了吗?

解决PR冲突

一种办法就是,在自己的forked repo之中解决冲突。

首先把原owner的repo fetch下来,然后把原owner的分支merge到自己的分支上去。

merge的时候会产生冲突。这时候解决冲突。此时冲突就解决了。

你可以直接push给原owner的repo,也可以先push到自己的repo,然后在github上手动点击PR.

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值