Git 实战 (三) | Github 必会高频基础命令与 IDE 的 Git 集成
GitHub 上我们可以 fork 别人的项目,为了与别人产生一种协作关系,将他人的项目在自己本地创建也一个,这里以霍格沃兹测试学院(Hogwarts)的演练环境做演示:
1.1) 点击 fork 按钮对项目进行 fork:
1.2)fork 完成后就可以在我们自己的 GitHub 账户下见到被 fork 的项目:
2.1)接着我们使用 git clone 命令将 fork 的项目 clone 到本地:
这个时候可以将此项目看做是自己的一个项目,可以任意修改;
2.2)项目的作者可以看到有哪些人 fork 了自己的项目:
3.1) 先在本地修改 README.md 文件为:
3.2)将文件提交到本地仓库:
![](https://static001.geekbang.org/infoq/bf/bf42bec9c42e62e35f9c98fb77cd10fd.png)
这个时候可以看到提交的作者已经变成我们自己了;也可以使用 git remote -v 命令来查看,可见现在本地仓库与远程仓库直接关联的是 fork 之后的项目:
![](https://static001.geekbang.org/infoq/e9/e9e86548073916df66cd628eb5520ac2.png)
3.3)只用 git push 命令将本地仓库的文件推到远程仓库中去:
![](https://static001.geekbang.org/infoq/07/07847f3f1e3c030786703632a3dc05f0.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
如下图可以看到已经成功将修改后的 README.md 文件推到了 GitHub 上:
pr:全称 pull request,当我们修改了 fork 后的项目后,因为不能直接修改别人的项目,这个时候想要将自己的修改与原项目合并,就可以使用 pr 来向原项目作者进行申请
4.1)发起 pr,点击 New pull request:
然后我们可以看到仓库路径从我的仓库向原作者项目仓库地址发起 pr 请求,在下面可以看到我对项目的修改 diff:
4.2)这个时候我们点击 Create new pull request 按钮,填写描述后再点击 Create new pull request 按钮:
![](https://static001.geekbang.org/infoq/ab/abb27b7491a227014ca49792bee3ad1a.png)
![](https://static001.geekbang.org/infoq/04/04c78b804a2c8a400d89b1118cb21cdb.png)
这个时候原仓库维护人员就可以收到 pr,并对其进行审核、评论、merge 或 close 的操作:
![](https://static001.geekbang.org/infoq/ad/ad72dfc2b2329cb04d6a5609b482b138.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
5.1) 在文件修改没有冲突(conflict)的时候,可以直接 merge:
5.2) 当文件修改有冲突的时候,就需要原作者去进行 RResolve 了:
5.3) 或者有冲突的 pr 直接 close:总结下来有以下三种情况:
无冲突直接 merge
有冲突手工 merge
有冲突 close 并重新发起 pr
有时候我们 fork 了项目,但是很有可能我们对项目的修改会比原项目滞后,这就会导致 pr 的时候容易出现 conflict;为了能让我们知道当前的修改是否 conflict,就需要使用 git fetch 命令了;
使用 git fetch 拿下来一个远程分支的文件,看一下这个分支和我自己的有什么冲突。
7.1)先使用 git remote -v 命令来查看本地仓库与远程仓库的关联关系
![](https://static001.geekbang.org/infoq/f0/f089b0983977bf05f0d7665f513aa4e9.png)
这个时候我们可以增加一个 remote,选择原仓库的 HTTPS 地址,使用 git remote add <远端名> <远端地址>命令来添加一个 remote:
![](https://static001.geekbang.org/infoq/61/613db8d409cb1698d9b2a9cc40a7aee1.png)
7.2)再将远程端的 master 分支 fetch 到本地:
![](https://static001.geekbang.org/infoq/0e/0ed9223764bd9ff242eef1ab84cc0ac7.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
7.3) 这时候使用 git merge 将当前 master 分支与远端分支合并:
![](https://static001.geekbang.org/infoq/26/26051d5a81bed0a40d10fa1abb5a4e0f.png)
结果中我们发现产生了冲突,再使用 git status 命令查看:
![](https://static001.geekbang.org/infoq/dc/dcbd21a6bd75981495066b22a25618f4.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
发现两边都修改了 README.md,这个时候我们使用 vi 对 README.md 进行查看,当我们 merge 的时候,系统会把文件换成以下的展示模式:
![](https://static001.geekbang.org/infoq/34/342ea11bfbb0b2d62942773727099913.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
这种展示模式的意思是以等号=为分隔符,等号上方为当前分支的修改,等号下方为远程分支的修改,这样就产生的冲突,我们可以手动进行修改,然后 merge:
![](https://static001.geekbang.org/infoq/74/742aec5851c4b56c52875d327e4197be.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
![](https://static001.geekbang.org/infoq/cb/cb42a7241ceebf00058775271ff53d51.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
![](https://static001.geekbang.org/infoq/08/083e51250ed980a40ebfe78ab403b260.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
7.4) 这个时候刷新 GitHub,在我们自己的分支仓库中可以看到已经成功将修改进行 merge:
这个时候如果再进行 pr 的话,遇见 conflict 的几率就会小的多了命令简单总结:
![](https://static001.geekbang.org/infoq/76/7664ddb9aae07ba8154191cd7858f6bd.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
8.1)将项目用 IDEA 打开,在 Version Control → log 中可以看到我们的提交管理线:
![](https://static001.geekbang.org/infoq/7c/7c8a932e1dca854e394c0c39db3aa802.png)
8.2)双击文件可以查看文件 diff:
![](https://static001.geekbang.org/infoq/e9/e9a142e36be6bba2bd4c8a9cd191658f.png)
8.3)在右下角还可以进行 Git 分支的管理:
免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档
http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/16565
评论