[从0到1]一文搞定git与github基础操作及提交pr全流程

🥰名片:

🐳作者简介:乐于分享知识的大二在校生
🌳本系列专栏: (点击直达)工具使用
🫣致读者:欢迎评论与私信,对于博客内容的疑问都会尽量回复哒!!!

⛵本文序:

🛸本文用一个小故事通俗易懂地介绍了git和github的基础使用,对于初学者友好,并介绍了提交pr的流程
🎡本文食用方法:可以尝试给自己的仓库提一个issue,自己给自己创建一个修复bug的分支,自己给自己提pr,感受一整个过程(并不需要真的修改什么,用基本的HelloWorld程序提交一行注释给自己就行)
❤️‍🔥如果本文对您有所帮助的话,请三连鸭UWU

本文以向DragonOS提交一个pr为例子

一:准备知识

以下通过一个故事讲解基础知识

  1. Git与GitHub的关系:
    Git 就像是你的“书写工具箱”,它包含了所有你写作时需要的工具和资源。你可以用它来写作、编辑、保存和管理你的文稿。Git 负责管理和跟踪你所有的修改,确保你可以随时回到之前的任何版本。
    GitHub 则像是一个“图书馆”,专门用来存放和展示你的文稿。你可以把用 Git 编写和管理的文稿上传到这个图书馆中,其他人也可以在这里查看、下载和贡献他们的文稿。
    所以,Git 是一个强大的本地工具,帮助你管理和追踪你的写作过程;而 GitHub 则是一个在线平台,帮助你分享、展示和与他人协作你的作品。
    注意以下比喻中,手稿是你放在家里的那一份原始稿件,文稿是放在GitHUb展示的那本书,即手稿的副本

  2. git add命令
    想象你正在用你的书写工具箱写一本书。你不满足文稿的第67~69页,你决定重新书写这几页的内容,你用空白的纸写好了,并把新的67~69页放在了一个文件袋里,你决定明天去图书馆把旧的67~69页换掉,add命令的行为就是你把这些新草稿放到一个文件袋里面了。

  3. git commit
    第二天早上,你把手稿从文件袋里拿出来,在手稿上签上日期和备注,记录你修改了哪些内容。这就像是在你的作品进度中做了一个里程碑式的保存点,详细说明了你做了哪些改变,方便日后回顾。commit命令就是你在手稿上签上日期和备注的行为。

  4. git push
    当天下午,你起身去图书馆,丢掉旧的67~69页,把新的放进了文稿中,更新了那里的书籍。

  5. git clone
    处理完工作后,你听说在图书馆(GitHub)里,有一本新来的书,你决定把那本书拿到图书馆的复印机复印一份,带回家慢慢看。git clone 就是你去图书馆,把这本书完整地复印一份带回家。现在,你有了一个完全相同的副本,可以在上面自由地阅读、批注,甚至是修改。

  6. git pull
    第三天,你与朋友去图书馆闲逛,发现你昨天复印的那本书的作者更新了那本书,于是你就把更新的那几页新内容带回家,融入到你昨天复印的书中。这样,你的版本始终与图书馆里的最新版保持同步。

  7. git branch --set-upstream-to
    因为图书馆书籍的封面是不能复印的材质,所以决定给这个副本设置一个封面,方便放在你的书架上。git branch --set-upstream-to命令,就是设置上游,这就像是在你的副本上贴一个封面,注明来源(来源于图书馆的哪一本书籍)。设置上游后,你的工具箱git就知道该与哪个书籍进行同步操作(因为其实不是你跑到图书馆去看书籍有没有更新,你是叫git去看的)。

  8. 提交 Pull Request(PR)
    当天晚上,你开始看那本复印来的书,聪明的你对这本书的内容有了新的想法,于是你动笔做出了修改。你想把这些改动分享给原作者。提交 PR 就像是你给原作者通过邮件递交了一份修订建议,包含了你修改后的章节,邀请他们审核并考虑将你的改动合并到原书中。

  9. 分支(git branch)
    第四天,那本书的作者在网络上征集故事结局和书籍第一章重写,并在图书馆中那本书的旁边放了两个箱子,分别贴上写着“结局征集”和“第一章重写征集”的便利贴,于是,你想为故事提供一个结局,你开始在家里创作。于此同时你的邻居小明也是该书的读者,他也想到了一个结局,他也开始创作。而你的朋友李华则想重写该书第一章节,他同样开始创作。你为这个结局起了一个名字叫“大团圆”,小明给自己写的结局名字叫“好聚好散”,李华给修改的第一章起了个名字叫做“增加伏笔”,你们三个决定明天一起去图书馆交给作者。其中,那两个箱子就叫分支,添加故事结局就是添加功能,修改第一章其实就是修改bug

  10. 合并(git merge)
    隔天你们去到了图书馆,把三份稿件放到了对应的箱子里,作者查看了李华的修改,觉得很好,就把他放回了箱子,接下来他查看了另一个箱子,里面有你和小明的结局草稿,他通过比较,决定留下你的结局,于是他把小明的草稿从箱子拿了出来,把你的放了进去,当天晚上,他确保没有任何问题后,把你和李华的草稿作为正式文稿,插入了图书馆的那本书中。其中,你和小明提交的代码只能保留一份,因为只能有一个结局,就叫合并冲突,最后作者把你和李华的草稿插入那本书就是git merge

那么这些概念在GitHub是怎么体现的呢,请看图
在这里插入图片描述
(注:提供一些关键词方便大家搜索,因为一些小操作比较零碎,而且在浏览器很容易找到介绍的文章,故不赘述。这些操作包含,①如何创建github账号和下载VScode和下载git工具 ②如何在github创建一个仓库 ③ 如何创建自己的token,给大家找到一篇简洁的,点击直达 ④ git push怎么配置用户名和密码(注:由于现在github需要token进行push,所以在push的时候你的密码应该输入token,否则你会发现无法正常push,你可以自己clone后,随便git push一下,依照报错自己解决,输入用户名和token, 其实根本不需要去搜索)

二:开始操作

  1. 登陆github,访问你将要提交pr的仓库,本文以https://github.com/DragonOS-Community/DragonOS为例子

  2. 查看issue,随便点击一个进去,这里以图中的991号issue为例子,网址为https://github.com/DragonOS-Community/DragonOS/issues/991
    在这里插入图片描述
    我们可以看到有“读者”在这里提交了一个issue,指出需要" 实现unix socket close 握手流程(四次挥手),在unix socket close时对unix 下的几张表进行对应表项资源的释放,防止unix下静态表扩张,占用内存 “的功能,我在下面回复了“ #1087 will fix it” 意思就是说第1087号pr会修复这个问题,通过https://github.com/DragonOS-Community/DragonOS/pull/1087可以查看修复进度,至于1087怎么来的,请接着看

  3. 我通过fork(第一张图片有标注fork在哪里),这样就可以在我的主页看到这个仓库的副本,即下方图片的第一个,我们也可以看到在DragonOS下方有一行小字,写着Forked from DragonOS-Community/DragonOS
    在这里插入图片描述

  4. 接下来我们把这个副本拉取到本地,方便我们修改代码,在文章的第一章图片中,有标注“Code"的绿色按钮,这个在每一个仓库的主页都能找到,所以,我们在我们自己仓库的DragonOS主页中,也可以看到同一个按钮,我们点击,复制网址,即图中的HTTPS下方的网址
    在这里插入图片描述

  5. 确保你已经下载了git(请针对不同的系统,在浏览器查找如何下载),使用"git clone 你复制的网址“,本文为git clone https://github.com/LINGLUO00/DragonOS.git,进行clone仓库。现在你在本地可以找到一个名为DragonOS的文件夹,用VScode打开这个本地文件夹。

  6. 在VSCode的插件中下载名为github pull requests的插件(具体下载请自行查找,网上很容易查)

  7. 现在我们通过git branch 可以查看到我们现在有的分支,一般是“master",接下来通过git checkout -b 创建并切换到一个新的分支,如下图,我们可以看到有了一个叫feat-network-rebuild的分支(因为我起了这个名字),同时可以看到在名字的前面,有一个*号,说明你现在在这个分支下面。

  8. 接下来,通过git push origin feat-network-rebuild,将本地 feat-network-rebuild 分支的更改推送到远程仓库的 origin 远程主机中。同样,该命令也会在远程仓库创建一个新的 feat-network-rebuild 分支或更新已有的分支,你就可以在自己的主页看到下图,出现了feat-network-rebuild分支
    在这里插入图片描述

  9. 现在你有一个本地分支 feat-network-rebuild,而远程仓库 origin 也有一个同名分支。通过运行以下命令:
    git branch --set-upstream-to=origin/feat-network-rebuild
    这将建立一个追踪关系,使本地 feat-network-rebuild 分支与远程 origin/feat-network-rebuild 分支同步。之后,当你在本地分支上运行 git pull 或 git push 命令时,Git 会自动知道应从远程的 feat-network-rebuild 分支拉取更新或推送改动。

  10. 想要看到origin具体是哪一个仓库,可以通过git remote get-url origin命令查看

  11. 接下来修改代码,并add和commit和push
    在这里插入图片描述

  12. 打开github,并切换到feat-network-rebuild分支,可以看到下图,多了一个提示“This branch is 1 commit ahead of DragonOS-Community/DragonOS:feat-network-rebuild”,意思就是说,你刚刚更新了你自己的feat-network-rebuild,但是他还没有合并到他人仓库(即真正的DragonOS项目的仓库,而不是你的副本)的feat-network-rebuild分支。
    在这里插入图片描述

  13. 点击contribute,可以看到你自己的修改,在这个界面开始创建pr,假设现在要把fork仓库的feat-network-rebuild分支提交到真正仓库的feat-network-rebuild分支,而不是master分支,那么在创建 PR 页面:
    在“base repository”下选择真正的仓库。
    在“base”分支下选择 真正仓库的feat-network-rebuild 分支。
    在“compare”分支下选择你的 feat-network-rebuild 分支。如下图
    在这里插入图片描述

  14. 点击上图的view pull request绿色按钮,进入下方页面
    填写 PR 的标题和描述
    填写 PR 的标题和详细描述,说明你所做的更改和目的。
    比如我的:fix(net): Unix 资源释放
    在这里插入图片描述

  15. 检查和确认更改内容,然后点击“Create pull request”按钮。
    可以看到下图,我们的“自己尝试提交pr”已经显示在时间线中,这样就说明了我们的pr已经提交,等待仓库主人的审核和合并
    在这里插入图片描述
    (注:图片中的warning的原因是,一般情况,我们都是提交pr给仓库的master主分支,但是由于我是在帮助该仓库的feat-network-rebuild分支修改bug,所以我提交到的不是master分支)

  16. 如果pr通过,那么在pr界面
    在这里插入图片描述

  17. (注:完成以上后,你可以去尝试探索更多东西,比如ssh密钥来配置免密登陆等等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值